javascript globalStorage类代码

时间:2024-04-22 12:51:08 

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,globalStorage
0
投稿

猜你喜欢

  • python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例

    2023-05-31 17:41:29
  • Tensorflow 卷积的梯度反向传播过程

    2021-02-05 09:15:29
  • Python2和Python3中print的用法示例总结

    2022-07-19 02:27:58
  • 2010 图标设计趋势

    2010-12-17 12:44:00
  • iis7 ASP+Access数据库连接错误

    2011-03-08 10:41:00
  • pandas.DataFrame中提取特定类型dtype的列

    2021-06-13 06:04:25
  • python递归&迭代方法实现链表反转

    2021-05-04 20:42:04
  • python使用plot绘制未来15天气温折线图

    2022-11-06 02:09:41
  • php自定义函数call_user_func和call_user_func_array详解

    2024-05-11 10:09:11
  • Python实现爬虫抓取与读写、追加到excel文件操作示例

    2023-11-10 09:08:34
  • Python参数解析器configparser简介

    2021-04-22 02:23:31
  • python 装饰器的实际作用有哪些

    2023-04-10 15:00:50
  • Pickle模块中的dump()和load()方法简介

    2023-03-21 04:18:06
  • MySql学习笔记之事务隔离级别详解

    2024-01-21 23:54:28
  • 如何得到数据库中所有表名 表字段及字段中文描述

    2012-01-05 18:56:44
  • 使用python将图片格式转换为ico格式的示例

    2022-01-09 09:28:36
  • Django学习之文件上传与下载

    2023-09-24 18:42:23
  • django foreignkey(外键)的实现

    2023-03-15 17:35:51
  • python 自定义异常和主动抛出异常(raise)的操作

    2022-03-22 12:43:22
  • python ChainMap 合并字典的实现步骤

    2021-06-19 01:24:52
  • asp之家 网络编程 m.aspxhome.com