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 相关文章推荐
一个不错的应用,用于提交获取文章内容,不推荐用
Mar 03 Javascript
JavaScript 图片预览效果 推荐
Dec 22 Javascript
javascript:void(0)的作用示例介绍
Oct 28 Javascript
JQuery动画与特效实例分析
Feb 02 Javascript
原生JS实现几个常用DOM操作API实例
Jan 19 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
Jan 20 Javascript
animate.css在vue项目中的使用教程
Aug 05 Javascript
ES6 迭代器与可迭代对象的实现
Feb 11 Javascript
微信小程序实现下拉框功能
Jul 16 Javascript
js实现简单的贪吃蛇游戏
Apr 23 Javascript
微信jssdk踩坑之签名错误invalid signature
May 19 Javascript
JavaScript对象访问器Getter及Setter原理解析
Dec 08 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
学习Vue组件实例
2018/04/28 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
python操作oracle的完整教程分享
2018/01/30 Python
python pygame实现方向键控制小球
2019/05/17 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
实现Python与STM32通信方式
2019/12/18 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
商务英语毕业生自荐信范文
2013/11/08 职场文书
微博营销计划书
2014/01/10 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
班委竞选演讲稿
2014/04/28 职场文书
应届生求职信
2014/05/31 职场文书
西柏坡观后感
2015/06/08 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书