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 相关文章推荐
一段效率很高的for循环语句使用方法
Aug 13 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
Mar 22 Javascript
Javascript面向对象编程(二) 构造函数的继承
Aug 28 Javascript
Jvascript学习实践案例(开发常用)
Jun 25 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
Oct 29 Javascript
js判断是否按下了Shift键的方法
Jan 27 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
Oct 31 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
Angular ng-repeat指令实例以及扩展部分
Dec 26 Javascript
JS ES6中setTimeout函数的执行上下文示例
Apr 27 Javascript
详解vue-cli中模拟数据的两种方法
Jul 03 Javascript
详解微信小程序支付流程与梳理
Jul 16 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将数据导入到Foxmail
2006/10/09 PHP
php daodb插入、更新与删除数据
2009/03/19 PHP
基于php伪静态的实现详细介绍
2013/04/28 PHP
php导出CSV抽象类实例
2014/09/24 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
js点击选择文本的方法
2015/02/09 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
python里大整数相乘相关技巧指南
2014/09/12 Python
python实现数独算法实例
2015/06/09 Python
在django中使用自定义标签实现分页功能
2017/07/04 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
python实现定时发送qq消息
2019/01/18 Python
Python 监测文件是否更新的方法
2019/06/10 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
小加工厂管理制度
2014/01/21 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
高三英语教学计划
2015/01/23 职场文书
新郎新娘致辞
2015/07/31 职场文书
教你怎么用python selenium实现自动化测试
2021/05/27 Python
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python