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 相关文章推荐
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
Feb 15 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
Oct 09 Javascript
面向对象的Javascript之二(接口实现介绍)
Jan 27 Javascript
js实现图片在未加载完成前显示加载中字样
Sep 03 Javascript
jQuery构造函数init参数分析续
May 13 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
Aug 05 Javascript
js中 计算两个日期间的工作日的简单实例
Aug 08 Javascript
基于jQuery实现照片墙自动播放特效
Jan 12 Javascript
JS实现闭包中的沙箱模式示例
Sep 07 Javascript
JavaScript键盘事件常见用法实例分析
Jan 03 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
Aug 28 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
Dec 12 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 file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
Python中对列表排序实例
2015/01/04 Python
Python 文件处理注意事项总结
2017/04/10 Python
python实现决策树
2017/12/21 Python
浅析python打包工具distutils、setuptools
2018/04/20 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
德国Discount-Apotheke中文官网:DC德式康线上药房
2020/02/18 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
文秘专业大学生求职信
2013/11/10 职场文书
2013届毕业生求职信范文
2013/11/20 职场文书
大学中国梦演讲稿
2014/04/23 职场文书
城市创卫标语
2014/06/17 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
教你怎么用Python生成九宫格照片
2021/05/20 Python