原生JavaScript常用本地浏览器存储方法三,UserData IE Only

UserData的应用范围

serData是微软为IE专门在系统中开辟的一块存储空间,所以说只支持Windows+IE的组合,实际测试在2000(IE5.5)、XP(IE6、IE7),Vista(IE7)下都是可以正常使用的。

UserData存储在哪儿?

首先设置文件夹全部显示,在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。

UserData容量

安全区域页大小限制域大小限制
Intranet512KB10MB
本机、可信任区域及Internet128KB1MB
受限制区域64KB640KB

线上使用时,单个文件的大小限制是128KB,一个域名下总共可以保存1024KB的文件,文件个数应该没有限制。在受限站点里这两个值分别是64KB和640KB,所以如果考虑到各种情况的话,单个文件最好能控制64KB以下。

由名/值对是作为XML节点的属性存储在userData的XML文档中,因此Internet Explorer可以自动将某些特殊字符转义为XML中的对应字符。例如,双引号(”)会被替换为",而连字符(&)会被替换 为&。由于这些自动转义的字符会增加实际存储的数据大小,因此开发人员必须确保有足够的空间来存储转义后的数据。

UserData如何使用?

UserData其实就是借助一个方法给xml文件添加修改数据

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创建

var oUserData = document.body;

oUserData.addBehavior("#default#userdata");

UserData数据设置保存

oUserData.setAttribute("name","dtdxrk");

oUserData.save("cs");

执行后,UserData文件夹中会生成一个cs[1].xml文件,其中的内容是:

<ROOTSTUB name="dtdxrk"/>

UserData数据读取

oUserData.load("cs");

oUserData.getAttribute("name");

UserData删除属性

oUserData.removeAttribute("name")

UserData设置过期时间

var d = new Date();

d.setDate(d.getDate()+365);

oUserData.expires = d.toUTCString();

如果不设置时间会被默认为永久保存

UserData作用域

不同域、甚至同一域下的不同子域之间都不能共享数据。此 外,同一主机不同端口上的应用程序之间也无法共享数据。我们只能在同域同目录下的不同页面之间共享数据。例如,http://abc.com/Storage/Checkout.html可以访问http://abc.com/Storage/UserData.html,以及任何/Storage/目录下网页所存储的数据。如果试图从其他页面访问,仅会返回一个null。这些默认的限制是无法 改变的,并且几乎与cookie的默认规则恰恰相反。这也使得userData成为了Internet Explore中少数几个较为安全的功能之一。

UserData封装的方法

 1 var oUserData = {
 2   oStart : null,
 3   init : function(){
 4     if(oUserData.oStart == null){
 5       oUserData.oStart = document.body;
 6       oUserData.oStart.addBehavior("#default#userdata");
 7     }
 8   },
 9   /* 
10   XmlName xml文件名称
11   attr 属性
12   data 数据
13   expiresDays 数据保存天数 不填为永久
14   */
15   save : function(XmlName, attr, data, expiresDays){
16     try{
17       oUserData.init();
18       var oStart = oUserData.oStart;
19       if(attr && data) oStart.setAttribute(attr, data);
20       if(expiresDays){
21         var d = new Date();
22         d.setDate(d.getDate()+expiresDays); 
23         oUserData.expires = d.toUTCString();
24       }
25       oStart.save(XmlName);
26     }catch(e){
27       alert("保存UserData失败!");
28     }
29   },
30   load : function(XmlName, attr){
31     try{
32       oUserData.init();
33       var oStart = oUserData.oStart;
34       if(oStart.load(XmlName)!==null && attr){
35         oStart.load(XmlName);
36         return oStart.getAttribute(attr);
37       }
38     }catch(e){
39       alert("提取UserData失败!");
40     }
41   },
42   del : function(XmlName, attr){
43     try{
44       oUserData.init();
45       var oStart = oUserData.oStart;
46       if(oStart.load(XmlName)!==null && attr){
47         oStart.load(XmlName);
48         oStart.removeAttribute(attr);
49         oStart.save(XmlName);
50       }
51     }catch(e){
52       alert("删除UserData失败!");
53     }
54   }
55 } 
56 
57 oUserData.save("lx","name","dtdxrk");
58 oUserData.del("lx","name");
59 oUserData.save("lx","name2","dtdxrk2");
60 alert(oUserData.load("lx","name"));
61 alert(oUserData.load("lx","name2"));