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 相关文章推荐
jquery 锁定弹出层实现代码
Feb 23 Javascript
jquery.validate分组验证代码
Mar 17 Javascript
php实例分享之实现显示网站运行时间
May 20 Javascript
JS简单循环遍历json数组的方法
Apr 22 Javascript
JS hashMap实例详解
May 26 Javascript
使用jquery.qrcode.js生成二维码插件
Oct 17 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
Oct 25 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
Apr 22 Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
May 09 Javascript
angularJS开发注意事项
May 26 Javascript
Vue中jsx不完全应用指南小结
Nov 01 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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
php判断字符以及字符串的包含方法属性
2008/08/30 PHP
PHP中删除变量时unset()和null的区别分析
2011/01/27 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
Js组件的一些写法
2010/09/10 Javascript
js类型检查实现代码
2010/10/29 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
JS获取鼠标坐标位置实例分析
2016/01/20 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
Python字符串和文件操作常用函数分析
2015/04/08 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Python面向对象程序设计示例小结
2019/01/30 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
解决Python3下map函数的显示问题
2019/12/04 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
Python如何安装第三方模块
2020/05/28 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
教师实习的自我鉴定
2013/10/26 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
TV动画《间谍过家家》公开PV
2022/03/20 日漫
nginx容器方式反向代理实战
2022/04/18 Servers