热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

javascriptglobalStorage类代码

globalStorage 这个也是html5中提出来,在浏览器关闭以后,使用globalStorage存储的信息仍能够保留下来,并且存储容
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             {
                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,还望指出。谢谢
推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ... [详细]
author-avatar
乀人生如梦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有