UserData的诡异bug
User Data: 是微软为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;单个文件的大小限制是128KB,一个域名下总共可以保存1024KB的文件,文件个数应该没有限制。在受限站点里这两个值分别是64KB和640KB,所以如果考虑到各种情况的话,单个文件最好能控制64KB以下。关于本地存储“愚人码头”的文章说的很详细,地址:http://www.css88.com/archives/3717#more-3717
在使用UserData的时候,在特定的系统下,在上述两个位置无法发现userData这个文件夹,原因暂时未知,可能是由于一些安全软件引起,有高手可给出详细原因。这个时候在保存及读取UserData的时候都会引起js错误,需要做简单的错误处理,将“愚人码头”的例子更改如下:
var UserData = {
userData : null,
name : location.hostname,
//this.name = "css88.com";
init:function(){
if (!UserData.userData) {
try {
UserData.userData = document.createElement('INPUT');
UserData.userData.type = "hidden";
UserData.userData.style.display = "none";
UserData.userData.addBehavior ("#default#userData");
document.body.appendChild(UserData.userData);
var expires = new Date();
expires.setDate(expires.getDate()+365);
UserData.userData.expires = expires.toUTCString();
} catch(e) {
return false;
}
}
return true;
},
setItem : function(key, value) {
if(UserData.init()){
try {
UserData.userData.load(UserData.name);
UserData.userData.setAttribute(key, value);
UserData.userData.save(UserData.name);
}catch(e){}
}
},
getItem : function(key) {
if(UserData.init()){
var value;
try {
UserData.userData.load(UserData.name);
value = UserData.userData.getAttribute(key);
}catch(e){
value="";
}
return value;
}
},
remove : function(key) {
if(UserData.init()){
try {
UserData.userData.load(UserData.name);
UserData.userData.removeAttribute(key);
UserData.userData.save(UserData.name);
}catch(e){}
}
}
};