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 相关文章推荐
javascript字符串拼接的效率问题
Dec 25 Javascript
DOM节点深度克隆函数cloneNode()用法实例
Jan 12 Javascript
JavaScript实现点击自动选择TextArea文本的方法
Jul 02 Javascript
BootStrap table使用方法分析
Nov 08 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
vue+swiper实现组件化开发的实例代码
Oct 26 Javascript
在vscode中统一vue编码风格的方法
Feb 22 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
Aug 13 Javascript
微信小程序常用简易小函数总结
Feb 01 Javascript
使用vuex存储用户信息到localStorage的实例
Nov 11 Javascript
使用Typescript和ES模块发布Node模块的方法
May 25 Javascript
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
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
php5.2.0内存管理改进
2007/01/22 PHP
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
Python lambda和Python def区别分析
2014/11/30 Python
python删除某个字符
2018/03/19 Python
python实现类之间的方法互相调用
2018/04/29 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
python实现坦克大战
2020/04/24 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
核心价值观演讲稿
2014/05/13 职场文书
诚信承诺书模板
2014/05/26 职场文书
企业挂职心得体会
2014/09/10 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
python运算符之与用户交互
2022/04/13 Python
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers