利用 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 的 pathdomain 属性来调整作用域。但是 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");
    };
}

点赞 取消点赞 收藏 取消收藏

<< 上一篇: Cookie

>> 下一篇: Web 应用存储和离线 Web 应用