应用范围


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函数定义结束


};


您可能感兴趣的文章:

  • js下利用userData实现客户端保存表单数据
  • 改版了网上的一个js操作userdata
  • IE本地存储userdata的一个bug说明