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 打造动态下滑菜单实现说明
Apr 15 Javascript
javascript数组详解
Oct 22 Javascript
jQuery插件开发的五种形态小结
Mar 04 Javascript
JavaScript中的acos()方法使用详解
Jun 14 Javascript
分享网页检测摇一摇实例代码
Jan 14 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
Apr 18 Javascript
axios拦截设置和错误处理方法
Mar 05 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
vueScroll实现移动端下拉刷新、上拉加载
Mar 22 Javascript
学习LayUI时自研的表单参数校验框架案例分析
Jul 29 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
Sep 04 Javascript
vue中使用腾讯云Im的示例
Oct 23 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
给多个地址发邮件的类
2006/10/09 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
vue-cli 目录结构详细讲解总结
2019/01/15 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
Python实现的tab文件操作类分享
2014/11/20 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
关于python3中setup.py小概念解析
2019/08/22 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
台湾森森购物网:U-mall
2017/10/16 全球购物
英国女装网上商店:I Saw It First
2018/10/18 全球购物
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
实现向右循环移位
2014/07/31 面试题
语文教育专业应届生求职信
2013/11/23 职场文书
高校自主招生自荐信
2013/12/09 职场文书
公司活动邀请函
2014/01/24 职场文书
忠诚教育心得体会
2014/09/03 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
会议欢迎词
2015/01/23 职场文书
仅用几行Python代码就能复制她的U盘文件?
2021/06/26 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
Log4j.properties配置及其使用
2021/08/02 Java/Android