globalStorage 
这个也是html5中提出来,在浏览器关闭以后,使用globalStorage存储的信息仍能够保留下来,并且存储容量比IE的userdata大得多,一个域下面是5120k。和sessionStorage一样,域中任何一个页面存储的信息都能被所有的页面共享。 
作用域 
globalStorage[''] 所有下面的页面都可以使用这块空间 
globalStorage[''] 所有下面的页面都可以使用这块空间 
globalStorage['com']:所有com域名都可以 共享的使用这一块空间 
globalStorage[''] :所有页面都可以使用的空间 
现在Firefox只支持当前域下的globalStorage存储, 如果使用公用域会导致一个这样一个类似的错误“Security error” code: “1000”。 
过期时间 
按照HTML5的描述,globalStorage只在安全问题或者当用户要求时才会过期,浏览器应该避免删除那些正在被脚本访问的数据,并且userdata应该是用户可写的。 
因此我们的脚本要能够控制过期时间,可以在globalStorage的某个区域存储过期时间,在load的时候判断是否过期,可以在一定程度上解决过期时间的问题。 
存储时,同时存储过期时间 
以上是我从网上查询到的资料,为了兼容非IE浏览器“userdata”,我改进了之前我自己写的一个
“userdata”(见 UserData使用总结) ,现在是兼容IE和支持globalStorage的浏览器了。

  复制代码 代码如下:

  function behaviorUserdata(udObj) 

    var me = this; 
    if(CMInfo.Bs_Name=='IE')    //IE下用userdata实现客户端存储 
    { 
        var loaded = '';    //当前已载入的文件名

this.udObj = getObject(udObj); 
        this.udObj.style.behavior = 'url(#default#userdata)'; 
        this.value = this.udObj.value; 
        this.inhtml = this.udObj.innerHTML;

//检查文件是否存在,存在est=undefined并返回true否则返回false 
        this.exist = function(filename){ 
            try{ 
                me.udObj.load(filename);//将文件名为 filename的 XML 载入 
                me.loaded = filename; 
                return true; 
            }catch(e){ return false;} 
        } 
        //预加载 
        this.preLoad = function(filename){ 
            if(me.loaded=='' || me.loaded!=filename){me.exist(filename);} 
            return me.loaded; 
        } 
        //获取指定的属性值 
        this.getAtrib = function(filename,atrib){ 
            if(me.preLoad(filename)!='') 
            { 
                var val = me.udObj.getAttribute(atrib); 
                return val==null?"":val; 
            }return ""; 
        } 
        //移除对象的指定属性 
        this.remAtrib = function(filename,atrib){ 
            me.udObj.removeAttribute(atrib); 
            me.udObj.save(filename);    //将对象数据保存到名为filename的XML文件里面 
            return true; 
        } 
        //设置指定的属性值 
        this.setAtrib = function(filename,atrib,val,expire){ 
            var etime = typeof(expire)=="undefined"?24*60*60:expire; 
            me.udObj.expires = me.setExpire(etime); 
            me.udObj.setAttribute(atrib,val); 
            me.udObj.save(filename); 
        } 
        //设置一个系列的对象数据(即整个XML文件)失效 
        this.remPartion = function(filename){ 
            if(me.exist(filename)) 
            { 
                me.udObj.expires = me.setExpire(-1); 
                me.udObj.save(filename); 
            } 
        } 
        //设置有效期 
        this.setExpire = function(sec){ 
            var oTimeNow = new Date(); 
            oTimeNow.setSeconds(oTimeNow.getSeconds() + parseInt(sec)); 
            return oTimeNow.toUTCString(); 
        } 
    }else    //非IE下用globalStorage实现客户端存储 
    { 
        var domain = document.domain;

//获取指定的属性值 
        this.getAtrib = function(filename,atrib){ 
            var oTimeNow = new Date(); 
            var etime = parseInt(window.globalStorage[domain][filename + "__expire"]);
            if(!etime || etime < parseInt(oTimeNow.getTime())) 
            { 
                me.remPartion(filename); 
                return ''; 
            } 
            return window.globalStorage[domain][filename + "__" + atrib]; 
        }

//移除对象的指定属性 
        this.remAtrib = function(filename,atrib){ 
            try{window.globalStorage.removeItem(filename + "__" + atrib);}catch(e){}//删除 
            return true; 
        }

//设置指定的属性值 
        this.setAtrib = function(filename,atrib,val,expire){ 
            var etime = typeof(expire)=="undefined"?24*60*60:expire; 
            window.globalStorage[domain][filename + "__expire"] = me.setExpire(etime); 
            window.globalStorage[domain][filename + "__" + atrib] = val; 
        }

//设置一个系列的对象数据失效 
        this.remPartion = function(filename){ 
            me.remAtrib(filename,"expire"); 
            return true; 
        }

//设置有效期 
        this.setExpire = function(sec){ 
            var oTimeNow = new Date(); 
            oTimeNow.setSeconds(oTimeNow.getSeconds() + parseInt(sec)); 
            return oTimeNow.getTime(); 
        }     
    } 
}

其中CMInfo类见 一些常用的JS功能函数(一) (2009-06-04更新) 
需要说明的是因为还没用到实际项目中,因此还不知其兼容性和稳定性如何,如果网友发现了BUG,还望指出。谢谢

转载于:https://www.cnblogs.com/jiechn/p/4080503.html

localstorage || globalStorage || userData相关推荐

  1. JavaScript本地存储实践(html5的localStorage和ie的userData)的实例页面

    本地存储解决方案很多,比如Flash SharedObject.Google Gears.Cookie.DOM Storage.User Data.window.name.Silverlight.Op ...

  2. html5保存资源本地,html5之Localstorage本地存储

    题外话 今天把博客里面的内容,同步在github的issues中了.具体地址是:https://github.com/confidence68/blog/issues ,欢迎大家访问,给star. L ...

  3. HTML5本地存储localStorage,sessionStorage

    HTML5新特性,用于本地存储, localStorage:不删除会一直存在斯基 sessionStorage:浏览器关掉,就跪了 /*** H5:数据存储方式,可以携带用户信息id* * 注意:* ...

  4. 页面校验请求MmEwMD(转载)

    写在前面 本人没有深入钻研过前端技术,JS属于亚文盲水平,这篇分析的目的是分享解决解决问题的思路. 提出假设,证明它或推翻它,如果推翻,就再提出一个新的假设.该走的弯路,一米都不能少 抛开所有不可能的 ...

  5. xss攻击突破转义_WEB安全之XSS攻击方式与防御方式

    上一期给大家简单介绍XSS以及其操作,本期将带大家了解XSS比较常见的攻击方式与防御方式,一起去了解一下~ XSS 常见攻击方法 1.绕过 XSS-Filter,利用 <> 标签注入 Ht ...

  6. XSS及CSRF攻击防御

    一.概念: XSS攻击全称跨站脚本攻击(Cross Site Scripting); CSRF(Cross-site request forgery)跨站请求伪造,也被称为"One Clic ...

  7. java如何获取storage_本地化存储Storage

    为什么会引入Storage(sessionStorage,localStorage,globalStorage) Web storage的目的是克服由cookie带来的限制,当数据需要严格控制在客户端 ...

  8. 省市区镇(可以选四级)联动点击自动展开下一级

    周末在家的时候,接到后端的一个电话,说领导有这个这样的需求.刚开始我理解错了.以为需要做一个省市区三级联动的,稀里哗啦的在网上找了数据.然后谢了出来.结果沟通才知道.需求理解错了,需要电商网站填写个人 ...

  9. 牛客网—web前端练习

    2018-12.1第一次练习 1.下列哪个样式定义后,内联(非块状)元素可以定义宽度和高度:display:block display属性 : block : CSS1 块对象的默认值.将对象强制作为 ...

最新文章

  1. 如何在SQL SELECT中执行IF…THEN?
  2. C++ new和delete操作符
  3. 蚂蚁集团上市造富:员工激励达1376.9亿元,人均超800万!
  4. pandas 中文打印无法对齐_2天学会Pandas
  5. win10企业版打开自带截图工具
  6. 一位程序员从业余项目被收购中所学到的
  7. 记一次Alluxio HA master启动失败
  8. Atitit  如何让精灵控件运动
  9. uint32 转 float 示例
  10. FTPS服务器搭建流程
  11. 搜索优化之四叉树算法(三)
  12. 页面最上方的搜索和logo叫什么_JS实现京东首页之页面顶部、Logo和搜索框功能...
  13. 中国传统四大菜系之:鲁菜
  14. threejs学习之透视相机与正交相机
  15. 解决Xcode报错“The certificate used to sign “xxxxxx” has either expired or has been revoked“
  16. 聊聊这8种单例模式的优缺点
  17. 《人工智能——从小白到大神》,张亚勤院士与百度陈尚义理事长联袂推荐
  18. 如何解决iOS设备AppStore下载一直是正在载入中
  19. 瑞萨E1/E20烧录工具自检方法
  20. 学习笔记:物料接收到质检库存的几种不同方式

热门文章

  1. 黄斑区隆起原因诊断过程+黄斑反复水肿问题
  2. intellij出现Error assembling JAR: invalid entry size
  3. CodedInputStream encountered an embedded string or message which claimed to have negative size.
  4. CapcityScheduler配置方法(还没弄完)
  5. django-allauth定制模板(转载)
  6. 大话数据结构:拓扑排序
  7. armadillo 使用注意 越界不报错
  8. 3.4 矩阵 $A,A^T,A^TA,AA^T$ 秩相等,左逆和右逆
  9. 3皮卡丘眨眼代码_眨眼检测调研以及活体检测应用
  10. mybatis项目报java.sql.SQLException: Numeric Overflow的异常