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. Course Schedule ——LeetCode

    There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...

  2. 《University Calculus》-chaper8-无穷序列和无穷级数-等比级数

    前言:其实无穷序列和无穷级数和数列{an}以及我们接触微积分就给出的极限概念lim有着紧密的联系,它对于我们在具体的问题当中进行建模和数据分析有着非常重要的作用. 无穷序列: 最简单的一种说法,就是一 ...

  3. linux运维社区站点收集

    1, 新世纪linux社区 offical locator: http://www.21ops.com/industry-news/24370.html 2,

  4. python用paramiko将执行的结果存入excel表格

    一.paramiko 利用paramiko可以远程控制服务器,上传和下载文件. 1.paramiko密码登录方式: #!/usr/bin/env python #coding:utf-8import ...

  5. spring mvc mybatis

    Spring与Mybatis整合需要引入一个mybatis-spring.jar包,该整合包有Mybatis提供,可以从Mybatis官网下载. 该jar包提供了几个API: 1.SqlSession ...

  6. Collections之sort、reverse

    在使用List集合时,通常情况下希望从集合中得到的对象是按照一定顺序排列的,但是List集合的默认排序方式为按照对象的插入顺序,可以通过java.util.Collections类的静态方法sort( ...

  7. Configuration所有配置简介

    // 内存缓存的设置选项 (最大图片宽度,最大图片高度) 默认当前屏幕分辨率                // .memoryCacheExtraOptions(480, 800) // 硬盘缓存的 ...

  8. C++类中静态变量

    以下是对类中static变量的一点解说    ===============================================    静态数据成员的用法和注意事项例如以下:       ...

  9. DM8168 坎坷硬件之路(DDR3)

    新做了8168板,调试DDR3的时候EMIF0遇到了个别数据位出错的问题 DDR3 128MB*8=1GB 我为了測试DDR3的所有空间,把地址存到DDR3中,就是*pdata++=(Uint32)p ...

  10. java.lang.Math中的基本方法

    java.lang.Math类提供的方法都是static的,“静态引入 ”使得不必每次在调用类方法时都在方法前写上类名:             import static java.lang.Mat ...