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 测试及效验工具
Apr 18 Javascript
jquery隐藏标签和显示标签的实例
Nov 11 Javascript
javascript使用输出语句实现网页特效代码
Aug 06 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
Feb 15 Javascript
简单分析javascript中的函数
Sep 10 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
Nov 03 Javascript
jQuery Validate 数组 全部验证问题
Jan 12 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
Aug 14 Javascript
Vue和React组件之间的传值方式详解
Jan 31 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
Jul 17 Javascript
多个Vue项目部署到服务器的步骤记录
Oct 22 Javascript
如何在 ant 的table中实现图片的渲染操作
Oct 28 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
抓取YAHOO股票报价的类
2009/05/15 PHP
php通过COM类调用组件的实现代码
2012/01/11 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
详解AngularJS 模态对话框
2016/04/07 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
详解Vue 事件修饰符capture 的使用
2017/12/29 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
Python3实战之爬虫抓取网易云音乐的热门评论
2017/10/09 Python
Django框架教程之正则表达式URL误区详解
2018/01/28 Python
wxpython绘制圆角窗体
2019/11/18 Python
pandas中ix的使用详细讲解
2020/03/09 Python
Python Http请求json解析库用法解析
2020/11/28 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
PHP经典面试题
2016/09/03 面试题
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
房地产销售大学生自我评价分享
2013/11/11 职场文书
自我评价范文点评
2013/12/04 职场文书
个人考核材料
2014/05/15 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
原告离婚代理词
2015/05/23 职场文书
心得体会格式及范文
2016/01/25 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android