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 相关文章推荐
动态创建的表格单元格中的事件实现代码
Dec 30 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
Nov 17 Javascript
函数式 JavaScript(一)简介
Jul 07 Javascript
jQuery中使用each处理json数据
Apr 23 Javascript
轻松搞定jQuery.noConflict()
Feb 15 Javascript
ionic 上拉菜单(ActionSheet)实例代码
Jun 06 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
Jun 20 Javascript
jQuery基本过滤选择器用法示例
Sep 09 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
Mar 29 jQuery
js判断节假日实例代码
Dec 27 Javascript
详解Vue、element-ui、axios实现省市区三级联动
May 07 Javascript
Vue 实现分页与输入框关键字筛选功能
Jan 02 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
编写PHP的安全策略
2006/10/09 PHP
几个学习PHP的网址
2006/11/25 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
php 计划任务 检测用户连接状态
2012/03/29 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
javascript读写json示例
2014/04/11 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
JS实现轮播图效果
2020/01/11 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
Python文件操作类操作实例详解
2014/07/11 Python
python基于phantomjs实现导入图片
2016/05/13 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
python实现小世界网络生成
2019/11/21 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
简历自荐信
2013/12/02 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
丑小鸭教学反思
2014/02/03 职场文书
三年级学生评语
2014/04/23 职场文书
单方投资意向书
2015/05/11 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS