利用 IE userData 持久化数据
IE5 及以上版本的浏览器通过在 Document 元素后面附加一个 userData
来实现客户端存储:
var memory = document.createElement("div");
memory.id = "_memory";
memory.style.display = "none";
memory.style.behavior = "url(#default#userData)"; // 附加 userData 行为
document.body.appendChild(memory);
然后我们可以通过 load()
和 save()
方法加载和保存数据:
memory.load("myStoreData");
var name = memory.getAttribute("name");
if (!name) {
name = prompt("What is your name?");
memory.setAttribute("name", name);
memory.save("myStoreData");
}
userData
存储的有效期和 localStorage
一样,除非手动删除,否则永远有效,不过我们可以通过 expires
属性设置有效期:
var now = (new Date()).getTime();
var expires = now + 100 * 24 * 60 * 60 * 1000; // 数据保存100天
expires = new Date(expires).toUTCString();
memory.expires = expires;
userData
的作用域限制在当前文档同目录的文档中(不含子目录),它的作用域还没有 Cookie 宽泛,也没有类似 Cookie 的 path
和 domain
属性来调整作用域。但是 userData 存储的数据量比 Cookie 要大。
下面是基于 IE 的 userData
实现的存储 API:
function userDataStorage(maxage) {
var memory = document.createElement("div");
memory.id = "_memory";
memory.style.display = "none";
memory.style.behavior = "url(#default#userData)"; // 附加 userData 行为
document.body.appendChild(memory);
if (maxage) {
var now = (new Date()).getTime();
var expires = now + maxage * 1000;
memory.expires = new Date(expires).toUTCString();
}
memory.load("userDataStorage");
this.getItem = function (key) {
return memory.getAttribute(key) || null;
};
this.setItem = function (key, value) {
memory.setAttribute(key, value);
memory.save("userDataStorage");
};
this.removeItem = function (key) {
memory.removeAttribute(key);
memory.save("userDataStorage");
};
}
No Comments