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的面向对象方法以及差别
Mar 31 Javascript
JS链式调用的实现方法
Mar 07 Javascript
JS来动态的修改url实现对url的增删查改
Sep 05 Javascript
javascript 动态创建表格的2种方法总结
Mar 04 Javascript
jquery easyUI中ajax异步校验用户名
Aug 19 Javascript
JS实现浏览上传文件的代码
Aug 23 Javascript
用Vue.js方法创建模板并使用多个模板合成
Jun 28 Javascript
优雅的使用javascript递归画一棵结构树示例代码
Sep 22 Javascript
vue实现element表格里表头信息提示功能(推荐)
Nov 20 Javascript
TypeScript高级用法的知识点汇总
Dec 17 Javascript
JS XMLHttpRequest原理与使用方法深入详解
Apr 30 Javascript
了不起的11个JavaScript代码重构最佳实践小结
Jan 11 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 面向对象详解
2012/09/13 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
React组件之间的通信的实例代码
2017/06/27 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
python实现探测socket和web服务示例
2014/03/28 Python
从Python的源码来解析Python下的freeblock
2015/05/11 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
python数据化运营的重要意义
2019/11/25 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
ORACLE十问
2015/04/20 面试题
餐厅经理岗位职责范本
2014/02/17 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
趣味运动会简讯
2015/07/20 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
MySQL分库分表详情
2021/09/25 MySQL