UserData用法总结 lanyu出品


Posted in Javascript onJuly 01, 2010

应用范围
UserData是微软为IE专门在系统中开辟的一块存储空间,所以说只支持Windows+IE的组合,实际测试在2000(IE5.5)、XP(IE6、IE7),Vista(IE7)下都是可以正常使用的。

在哪儿?
在XP下,一般位于C:\Documents and Settings\用户名\UserData,有些时候会在C:\Documents and Settings\用户名\Application Data\Microsoft\Internet Explorer\UserData。

在Vista下,位于C:\Users\用户名\AppData\Roaming\Microsoft\Internet Explorer\UserData。

容量
网页制作完成手册中这样说:

Security Zone
Document Limit (KB)
Domain Limit (KB)

Local Machine
128
1024

Intranet
512
10240

Trusted Sites
128
1024

Internet
128
1024

Restricted
64
640

线上使用时,单个文件的大小限制是128KB,一个域名下总共可以保存1024KB的文件,文件个数应该没有限制。在受限站点里这两个值分别是64KB和640KB,所以如果考虑到各种情况的话,单个文件最好能控制64KB以下。

如何使用?
用下面的JS语句就可以建立一个支持UserData的对象:

o = document.createElement('input');
o.type = "hidden";
o.addBehavior ("#default#userData");
//UserData.o.style.behavior = "url('#default#userData')" ;
//上面的语句也是一样的作用
document.body.appendChild(o);

说白了UserData就是样式里的一个Behavior,所以这样写也是一样的:

<input type=hidden class= storeuserData />
<style>
.storeuserData {behavior:url(#default#userData);}
</style>

UserData可以绑定在大多数的html标签上,具体为:

A, ACRONYM, ADDRESS, AREA, B, BIG, BLOCKQUOTE, BUTTON, CAPTION, CENTER, CITE, CODE, DD, DEL, DFN, DIR, DIV, DL, DT, EM, FONT, FORM, hn, HR, I, IMG, INPUT type=button, INPUT type=checkbox, INPUT type=file, INPUT type=hidden, INPUT type=image, INPUT type=password, INPUT type=radio, INPUT type=reset, INPUT type=submit, INPUT type=text, KBD, LABEL, LI, LISTING, MAP, MARQUEE, MENU, OBJECT, OL, OPTION, P, PLAINTEXT, PRE, Q, S, SAMP, SELECT, SMALL, SPAN, STRIKE, STRONG, SUB, SUP, TABLE, TEXTAREA, TT, U, UL, VAR, XM

UserData对象有以下的属性和方法:

属性
描述

expires
设置或读取文件过期时间

XMLDocument
读取文件的XML DOM

方法
描述

getAttribute
读取指定属性的值

load
打开文件

removeAttribute
删除指定的属性

save
保存文件

setAttribute
为指定属性赋值

UserData文件实际上就是一个XML文件,通过文件名->属性的方式保存字符串,如以下一段代码:

o.setAttribute("code", "hello world!");
o.save("baidu");

执行后,UserData文件夹中会生成一个baidu[1].xml文件,其中的内容是:
<ROOTSTUB code="hello,world!"/>

在一个文件中可以有多个属性,也就是可以存储多种不同的数据。

在音乐盒链接保存项目里,封装了一个UserData类,这样可以更方便地使用UserData,代码如下:

/** @class 定义userdata的操作 */ 
var UserData = { 
// 定义userdata对象 
o : null, 
// 设置文件过期时间 
defExps : 365, 
// 初始化userdate对象 
init : function(){ 
if(!UserData.o){ 
try{ 
UserData.o = document.createElement('input'); 
UserData.o.type = "hidden"; 
//UserData.o.style.behavior = "url('#default#userData')" ; 
UserData.o.addBehavior ("#default#userData"); 
document.body.appendChild(UserData.o); 
}catch(e){ 
return false; 
} 
}; 
return true; 
}, 
// 保存文件到userdata文件夹中 f-文件名,c-文件内容,e-过期时间 
save : function(f, c, e){ 
if(UserData.init()){ 
var o = UserData.o; 
// 保持对象的一致 
o.load(f); 
// 将传入的内容当作属性存储 
if(c) o.setAttribute("code", c); 
// 设置文件过期时间 
var d = new Date(), e = (arguments.length == 3) ? e : UserData.defExps; 
d.setDate(d.getDate()+e); 
o.expires = d.toUTCString(); 
// 存储为制定的文件名 
o.save(f); 
} 
}, 
// 从uerdata文件夹中读取指定文件,并以字符串形式返回。f-文件名 
load : function(f){ 
if(UserData.init()){ 
var o = UserData.o; 
// 读取文件 
o.load(f); 
// 返回文件内容 
return o.getAttribute("code"); 
} 
}, 
// 检查userdata文件是否存在 f-文件名 
exist : function(f){ 
return UserData.load(f) != null; 
}, 
// 删除userdata文件夹中的指定文件 f-文件名 
remove : function(f){ 
UserData.save(f, false, -UserData.defExps); 
} 
// UserData函数定义结束 
};
Javascript 相关文章推荐
Code:findPosX 和 findPosY
Dec 20 Javascript
js判断变量是否空值的代码
Oct 26 Javascript
js遍历、动态的添加数据的小例子
Jun 22 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
May 14 Javascript
JavaScript常用字符串与数组扩展函数小结
Apr 24 Javascript
JS平滑无缝滚动效果的实现代码
May 06 Javascript
浅谈几种常用的JS类定义方法
Jun 08 Javascript
JavaScript实现简单的四则运算计算器完整实例
Apr 28 Javascript
Angular2 父子组件数据通信实例
Jun 22 Javascript
javascript帧动画(实例讲解)
Sep 02 Javascript
利用angular、react和vue实现相同的面试题组件
Feb 19 Javascript
JS实现全屏预览F11功能的示例代码
Jul 23 Javascript
javascript 函数调用的对象和方法
Jul 01 #Javascript
this和执行上下文实现代码
Jul 01 #Javascript
jquery.validate使用攻略 第五步 正则验证
Jul 01 #Javascript
jquery validate使用攻略 第四步
Jul 01 #Javascript
jquery.validate使用攻略 第三部
Jul 01 #Javascript
jquery.validate使用攻略 第二部
Jul 01 #Javascript
jQuery Validation插件remote验证方式的Bug解决
Jul 01 #Javascript
You might like
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
document.compatMode介绍
2009/05/21 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
python中pygame模块用法实例
2014/10/09 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
Python 实现try重新执行
2019/12/21 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
Python多线程多进程实例对比解析
2020/03/12 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
马来西亚最好的婴儿商店:Motherhood
2017/09/14 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
最新创业融资计划书
2014/01/19 职场文书
运动会入场解说词300字
2014/01/25 职场文书
三爱活动实施方案
2014/03/19 职场文书
个人作风建设自查报告
2014/10/22 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
2015年入党决心书
2015/02/05 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
html粘性页脚的具体使用
2022/01/18 HTML / CSS