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读取中文COOKIE的解决办法
Feb 15 Javascript
零基础学JavaScript最新动画教程+iso光盘下载
Jan 22 Javascript
JS获取页面窗口大小的代码解读
Dec 01 Javascript
js对象关系图 方便dom操作
Mar 18 Javascript
js的onload事件及初始化按钮事件示例代码
Sep 25 Javascript
浅析javascript中function 的 length 属性
May 27 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
Jul 04 Javascript
JavaScript中各数制转换全面总结
Aug 21 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
Jul 03 Javascript
Vue页面切换和a链接的本质区别详解
Nov 12 Javascript
详解React路由传参方法汇总记录
Nov 29 Javascript
JavaScript实现简单计时器
Jun 22 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执行速度全攻略(下)
2006/10/09 PHP
11个PHP 分页脚本推荐
2011/08/15 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
javascript 常用方法总结
2009/06/03 Javascript
页面版文本框智能提示JS代码
2009/11/20 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
Python学习之os模块及用法
2020/06/03 Python
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
商场经理竞聘演讲稿
2014/01/01 职场文书
服务口号大全
2014/06/11 职场文书
教师个人读书活动总结
2014/07/08 职场文书
法定授权委托证明书
2014/09/27 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL