javascript globalStorage类代码


Posted in Javascript onJune 04, 2009

globalStorage
这个也是html5中提出来,在浏览器关闭以后,使用globalStorage存储的信息仍能够保留下来,并且存储容量比IE的userdata大得多,一个域下面是5120k。和sessionStorage一样,域中任何一个页面存储的信息都能被所有的页面共享。
作用域
globalStorage['z.baidu.com'] 所有z.baidu.com下面的页面都可以使用这块空间
globalStorage['baidu.com'] 所有baidu.com下面的页面都可以使用这块空间
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,还望指出。谢谢
Javascript 相关文章推荐
关于javascript 回调函数中变量作用域的讨论
Sep 11 Javascript
基于jsTree的无限级树JSON数据的转换代码
Jul 27 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
Sep 24 Javascript
Javascript动态引用CSS文件的2种方法介绍
Jun 06 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
May 15 Javascript
js获取图片宽高的方法
Nov 25 Javascript
JS操作JSON方法总结(推荐)
Jun 14 Javascript
详解获取jq ul第一个li定位的四种解决方案
Nov 23 Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 Javascript
Vue.js在使用中的一些注意知识点
Apr 29 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
Sep 17 Javascript
vue路由 遍历生成复数router-link的例子
Oct 30 Javascript
IE8 兼容性问题(属性名区分大小写)
Jun 04 #Javascript
JavaScript效率调优经验
Jun 04 #Javascript
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
Jun 04 #Javascript
javascript 常用方法总结
Jun 03 #Javascript
Javascript 获取字符串字节数的多种方法
Jun 02 #Javascript
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
Jun 02 #Javascript
Javascript String对象扩展HTML编码和解码的方法
Jun 02 #Javascript
You might like
PHP实现简单实用的分页类代码
2016/04/08 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
nodejs中函数的调用实例详解
2018/10/31 NodeJs
js html实现计算器功能
2018/11/13 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
python与C互相调用的方法详解
2017/07/14 Python
python实现简易数码时钟
2021/02/19 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
护士思想汇报
2014/01/12 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
法人委托书范本
2014/04/04 职场文书
小学安全汇报材料
2014/08/14 职场文书
九九重阳节标语
2014/10/07 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
会计电算化实训报告
2014/11/04 职场文书
幼儿教师辞职信
2015/02/27 职场文书
公司处罚决定书
2015/06/24 职场文书
致运动员的广播稿
2015/08/19 职场文书
创业计划书之酒厂
2019/10/14 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL