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容量
安全区域 | 页大小限制 | 域大小限制 |
Intranet | 512KB | 10MB |
本机、可信任区域及Internet | 128KB | 1MB |
受限制区域 | 64KB | 640KB |
线上使用时,单个文件的大小限制是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"));