当前位置: 首页 > 图文教程 > 网络编程 > Javascript > javascript globalStorage类代码

Javascript
用JavaScript实现浏览器地震效果
Javascript实例教程(8) 利用Javascript基于浏览器类型的重定向
Javascript实例教程(14) 鼠标触发窗口
使主页呈现“飞舞”特效
Javascript实例教程(21) OLE Automation(1)
Javascript实例教程(13) 鼠标移过时报警
Javascript实例教程(10) 随机显示图片
Javascript实例教程(2) 创建弹出式窗口
JavaScript 小技巧(第十集)
Javascript实例教程(3) 创建折叠式导航菜单
Javascript实例教程(7) 利用Javascript进行密码保护
完美解决一个事件激活多个函数(2)
Javascript模拟游戏中的弹出菜单效果
Javascript实例教程(6) 在一个表单中设置和检查Cookies
JavaScript 小技巧(第八集)
Javascript实例教程(4) 探测浏览器插件
JavaScript 小技巧(第九集)
JavaScript学习:基础继承机制
初学Javascript之cookie篇(译)
让弹出窗口变得“体贴”一些(javascript)

Javascript 中的 javascript globalStorage类代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 164 ::
收藏到网摘: n/a

非IE浏览器“userdata”的解决方案 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,还望指出。谢谢