悟道前端

闻道有先后,术业有专攻

生于1990,毕业于非知名学校的非专业码农,希望成为前端翘楚,并一直努力着

IE本地存储方案

@(blog)[userData]

IE8+及现代浏览器都有了localStorage对象,所以本方案只是针对IE6-7的解决方案,在做全兼容的功能时,先检测localStorage对象,再来检测本方案,注意先后顺序

代替cookie的原因

简介

要使用userData存储功能,必须先建立一个HTML标签,然后将behavior:url('#default#userData')样式属性加上去,等于说userData是寄存于HTML标签的,当然不是所有标签都是可以的,仅限于部分标签。

封装

下面封装一个userData单体: userData.js

var userData = (function(){

    var store,
        name = 'webfing';

    try{
        init();
    }catch(e){
        return;
    }

    function init(){
        store = document.createElement('input');
        store.type = "hidden";
        store.style.display = "none";
        store.addBehavior("#default#userData"); //关键一句
        var date = new Date();
        date.setDate(date.getDate()+365);   //注意时间加一年的技巧
        store.expires = date.toUTCString();
        document.body.appendChild(store);
    }

    function setItem(key, value){
        store.load(name);
        store.setAttribute(key, value);
        store.save(name);
    }

    function getItem(key, value){
        store.load(name);
        return store.getAttribute(key);
    }

    function removeItem(key){
        store.load(name);
        store.removeAttribute(key);
        store.save(name);
    }

    return {
        setItem: setItem,
        getItem: getItem,
        removeItem: removeItem
    }

})();

用法:

if (userData){
    if (!userData.getItem('search')){
        userData.setItem('search', '我来了');
    }else{
        var text = document.createTextNode(userData.getItem('search'));
        document.body.appendChild(text);
    }
}

参考资料:

https://github.com/marcuswestin/store.js

http://mao.li/tag/userdata/

http://wangye.org/blog/archives/65/

http://www.planabc.net/2008/08/05/userdata_behavior/

点击查看评论

Study

Think

Project