新浪微博之LocalStorage

在FF下,新浪微博会把已输入的微博内容存到客户端的某处。然后在未刷新页面的时候可以把这个内容调出来填到发微博的框里。通常的想法是在textarea的oninput的时候,把textarea的内容存到cookie里去。

但我跟踪了新浪的页面,客户端并没有触发set cookie之类的操作。

于是扒了新浪的代码,学习一下吧。

(function(){
    App.storage=(function(){
        var objDS=window.localStorage;
        if(window.ActiveXObject){
            store=document.documentElement;
            STORE_NAME="localstorage";
            try{
                store.addBehavior("#default#userdata");
                store.save(STORE_NAME)
            }catch(e){}
            return{
                set:function(key,value){
                    try{
                        store.setAttribute(key,value);
                        store.save(STORE_NAME)
                    }catch(e){}
                },
                get:function(key){
                    try{
                        store.load(STORE_NAME);
                        return store.getAttribute(key)
                    }catch(e){
                        return""
                    }
                },
                del:function(key){
                    try{
                        store.removeAttribute(key);
                        store.save(STORE_NAME)
                    }catch(e){}
                }
            }
        }else{
            if(objDS){
                return{
                    get:function(key){
                        return objDS.getItem(key)==null?null:unescape(objDS.getItem(key))
                    },
                    set:function(key,value,exp){
                        objDS.setItem(key,escape(value))
                    },
                    del:function(key){
                        objDS.removeItem(key)
                    },
                    clear:function(){
                        objDS.clear()
                    },
                    getAll:function(){
                        var l=objDS.length,key=null,ac=[];
                        for(var i=0;i<l;i++){
                            key=objDS.key(i),ac.push(key+"="+this.getKey(key))
                        }
                        return ac.join("; ")
                    }
                }
            }else{
                return{
                    get:function(key){
                        var aCookie=document.cookie.split("; "),l=aCookie.length,aCrumb=[];
                        for(var i=0;i<l;i++){
                            aCrumb=aCookie[i].split("=");
                            if(key===aCrumb[0]){
                                return unescape(aCrumb[1])
                            }
                        }
                        return null
                    },
                    set:function(key,value,exp){
                        if(!(exp&&typeof exp===date)){
                            exp=new Date(),exp.setDate(exp.getDate()+1)
                        }
                        document.cookie=key+"="+escape(value)+"; expires="+exp.toGMTString()
                    },
                    del:function(key){
                        document.cookie=key+"=''; expires=Fri, 31 Dec 1999 23:59:59 GMT;"
                    },
                    clear:function(){
                        var aCookie=document.cookie.split("; "),l=aCookie.length,aCrumb=[];
                        for(var i=0;i<l;i++){
                            aCrumb=aCookie[i].split("=");
                            this.deleteKey(aCrumb[0])
                        }
                    },
                    getAll:function(){
                        return unescape(document.cookie.toString())
                    }
                }
            }
        }
    })()
})();

1. HTML5
2. 浏览器兼容

Copyright © 2011. All Rights Reserved.

发表评论

电子邮件地址不会被公开。 必填项已用*标注