• localstorage || globalStorage || userData


    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,还望指出。谢谢

  • 相关阅读:
    git revert和git reset的区别
    git merge 和 git rebase 小结
    Markdown——入门指南
    使用Git Wiki 管理文档时,文档编写的基本用法
    mysql 列 默认添加 dedault null ??
    redis aof文件过大问题
    redis源码分析——aofrewrite
    改变文章的字号大小
    推荐大家使用的CSS书写规范及顺序
    inline-block 前世今生
  • 原文地址:https://www.cnblogs.com/jiechn/p/4080503.html
Copyright © 2020-2023  润新知