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 相关文章推荐
js实现简单模态窗口,背景灰显
Nov 14 Javascript
extjs 列表框(multiselect)的动态添加列表项的方法
Jul 31 Javascript
几个比较经典常用的jQuery小技巧
Mar 01 Javascript
window.location.hash 属性使用说明
Mar 20 Javascript
javascript代码编写需要注意的7个小细节小结
Sep 21 Javascript
Jquery实现由下向上展开效果的例子
Dec 08 Javascript
原生javascript实现DIV拖拽并计算重复面积
Jan 02 Javascript
jquery实现漂亮的二级下拉菜单代码
Aug 26 Javascript
zTree插件下拉树使用入门教程
Apr 11 Javascript
jquery动态切换背景图片的简单实现方法
May 14 Javascript
Vue.js自定义事件的表单输入组件方法
Mar 08 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
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实现过滤各种HTML标签
2015/05/17 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
java直接调用python脚本的例子
2014/02/16 Python
python提取内容关键词的方法
2015/03/16 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
python两个list[]相加的实现方法
2020/09/23 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
Crocs波兰官方商店:女鞋、男鞋、童鞋、洞洞鞋
2019/10/08 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
国窖1573广告词
2014/03/21 职场文书
企业宣传工作方案
2014/06/02 职场文书
签约仪式策划方案
2014/06/02 职场文书
单身申明具结书
2015/02/26 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
用python修改excel表某一列内容的操作方法
2021/06/11 Python