globalStorage 
这个也是html5中提出来,在浏览器关闭以后,使用globalStorage存储的信息仍能够保留下来,并且存储容量比IE的userdata大得多,一个域下面是5120k。和sessionStorage一样,域中任何一个页面存储的信息都能被所有的页面共享。 
作用域 
globalStorage[''] 所有下面的页面都可以使用这块空间 
globalStorage[''] 所有下面的页面都可以使用这块空间 
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,还望指出。谢谢

localstorage || globalStorage || userData的更多相关文章

  1. js本地存储解决方案(localStorage与userData)

    WEB应用的快速发展,是的本地存储一些数据也成为一种重要的需求,实现的方案也有很多,最普通的就是cookie了,大家也经常都用,但是cookie的缺点是显而易见的,其他的方案比如:IE6以上的user ...

  2. 数据存储之Web存储(sessionStorage localStorage globalStorage )

    Web Storage 两个目标 提供一种在cookie之外的存储会话守数据的途径 提供一种存储大量可以跨会话存在的数据机制 最初的Web Storage规范包含两个对象 sessionStorage ...

  3. JS本地存储信息的实现方式(localStorage 与 userData)

    详细介绍请看: http://www.cnblogs.com/beiyuu/archive/2011/07/20/js-localstorage-userdata.html 里面涉及到的 demo 代 ...

  4. localStorage 以及UserData[IE6 IE7]使用

    说在前头: UserData:属于IE6 IE7的老东西.麻烦且体验差,暂且不表 localStorage 属于HTML5的东西,兼容IE8以及其它W3C标准的主流浏览器.所以尽可能的具体解说 注意: ...

  5. 原生JavaScript常用本地浏览器存储方法五(LocalStorage+userData的一个浏览器兼容类)

    基于LocalStorage+globalStorage+userData实现的一个本地存储类 userData用来兼容ie6 ie7 由userData模仿Session的方法:浏览器关闭删除保存的 ...

  6. JavaScript本地存储实践(html5的localStorage和ie的userData)

    http://www.css88.com/archives/3717 JavaScript本地存储实践(html5的localStorage和ie的userData) 发表于 2011年06月11日  ...

  7. Localstorage本地存储兼容函数

    前言HTML5提供了本地存储的API:localstorage对象和sessionStorage对象,实现将数据存储到用户的电脑上.Web存储易于使用.支持大容量(但非无限量)数据同时存储,同时兼容当 ...

  8. JavaScript资源大全中文版(Awesome最新版)

    Awesome系列的JavaScript资源整理.awesome-javascript是sorrycc发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架.运行器.QA.MVC框架和库.模 ...

  9. 【jQuery】todolist

    1 2 3 用npm命令下载依赖,优点:不用去网上找链接,代码都一样 4.jQuery自动下载进node_modules文件下 npm install jquery --save  这句命令的意思是保 ...

随机推荐

  1. 数据结构(树链剖分):COGS 2109. [NOIP2015] 运输计划

    2109. [NOIP2015] 运输计划 ★★★   输入文件:transport.in   输出文件:transport.out   简单对比时间限制:1 s   内存限制:256 MB [题目描 ...

  2. 怎么添加项目到SVN上面

     一.通过SVN客户端向服务器上面添加项目 1.在服务器上面创建一个文件夹,文件夹以项目名称命名. 2.在合适目录下右击后,点击SVN Checkout,将你在服务器上面创建的目录checkout下来 ...

  3. Nodejs in Visual Studio Code 10.IISNode

    1.开始 Nodejs in Visual Studio Code 08.IIS : http://www.cnblogs.com/mengkzhaoyun/p/5410185.html 参考此篇内容 ...

  4. Wow! Such Doge! - HDU 4847 (水题)

    题目大意:题目描述了一大堆.....然而并没什么用,其实就是让求给的所有字符串里面有多少个"doge",不区分大小写.   代码如下: ====================== ...

  5. oGitHub 注册

    GitHub 注册 要想使用 GitHub 第一步当然是注册 GitHub 账号: 1.首先打开 https://github.com/pricing 进行注册. 2.在打开的页面中点击「Sign u ...

  6. AngularJS $on $broadcast $emit

    如何在作用域之间通信呢?    1.创建一个单例服务,然后通过这个服务处理所有子作用域的通信.    2.通过作用域中的事件处理通信.但是这种方法有一些限制:例如,你并不能广泛的将事件传播到所有监控的 ...

  7. 如何修改WAMP中mysql数据库账号和密码

    WAMP安装好后,mysql密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作. 首先,通过WAMP打开mysql控制台. 提示输入密码,因为现在是空,所以直接按回车 ...

  8. Mysql操作命令出现错误时消除/mysql数据导入txt

    MySQL怎样取消错误命令 http://jingyan.baidu.com/album/546ae1851e9fd61149f28cef.html?picindex=6 mysql导入数据load ...

  9. python获取网络时间和本地时间

    今天我们来看一下如何用python获取网络时间和本地时间,直接上代码吧,代码中都有注释. python获取网络时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  10. OpenMP并行程序设计

    1.fork/join并行执行模式的概念 2.OpenMP指令和库函数介绍 3.parallel 指令的用法 4.for指令的使用方法 5 sections和section指令的用法 1.fork/j ...