隨筆 - 11  文章 - 3  trackbacks - 0
          <2010年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          新寫了一個兼容ie,ff的Storage類,主要實現:
          1.存儲,
          2.獲取,
          3.刪除,

          數據支持字符串/json

          以下是源碼:

          Storage = (function(){
              var isInit 
          = false;
              var obj 
          = null;
              var defDay 
          = 365;
              var isIE 
          = ("\v" == "v");
              var ikey 
          = "Tenpay_Default_Data";
              var domain 
          = document.domain; //或者提取自己框架的
              var initObj = function(){
                  
          if(isIE){
                      obj 
          = document.createElement("div");
                      obj.id 
          = "Default_JData_id";
                      obj.style.behavior 
          = "url('#default#userData')"
                      document.body.appendChild(obj);
                      isInit 
          = true;
                  }
              };
              var setExpire 
          = function(day){
                  defDay 
          = day;
              };
              var jsonToStr 
          = function(json){
                  var list 
          = [];
                  
          if("string" === typeof(json)) return "\""+ json.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";
                  if("number" === typeof(json)) return json;
                  
          if("undefined" === typeof(json)) return "undefined";
                  
          if("object" === typeof(json)){
                      
          if(null === json){return null}
                      
          else if("function" === typeof(json.sort)){
                          
          for(var i = 0,len = json.length; i < len; i++){
                              list.push(jsonToStr(json[i]));
                          }
                          
          return "["+ list.join() +"]";
                      }
          else{
                          
          for(var i in json){
                              list.push(i 
          + ":" + jsonToStr(json[i]));
                          }
                          
          return "{"+ list.join() +"}";
                      }
                  }
              };
              var strToJson 
          = function(str){
                  
          return eval('('+ str +')');
              };
              var setData 
          = function(name, value, domain_name, key, day){
                  ikey 
          = key || ikey;
                  domain 
          = domain_name || domain;
                  
          if(!isInit){initObj()};
                  
          if(value instanceof Object){
                      value 
          = jsonToStr(value);
                  }
                  var d 
          = new Date(),exps = (null != day ? day : defDay);
                  d.setSeconds(d.getSeconds() 
          + exps * 24 * 3600);
                  
          try{if(isIE){
                      obj.load(ikey);
                      obj.setAttribute(name, value);
                      obj.expires 
          = d.toUTCString();
                      obj.save(ikey);
                  }
          else if(window.globalStorage){
                       globalStorage[domain][ikey 
          + "__" + name] = value;
                       globalStorage[domain][ikey 
          + "__expire"= d.getTime();
                  }}
          catch(e){}
              };
              var getData 
          = function(name, domain_name, key){
                  ikey 
          = key || ikey;
                  domain 
          = domain_name || domain;
                  
          if(!isInit){initObj()};
                  
          try{
                
          if(isIE){
                      obj.load(ikey);
                      
          return /^\{.*\}$|^\[.*\]$/.test(obj.getAttribute(name)) ? strToJson(obj.getAttribute(name)) : obj.getAttribute(name);
                    }
          else if(window.globalStorage){
                  var now 
          = parseFloat((new Date()).getTime()), exp = parseFloat(globalStorage[domain][ikey + "__expire"]);
                  
          if (exp > now) {
                        
          return /^\{.*\}$|^\[.*\]$/.test(globalStorage[domain][ikey + "__" + name]) ? strToJson(globalStorage[domain][ikey + "__" + name]) : globalStorage[domain][ikey + "__" + name];
                  }
          else {
                    delData(name, key);
                  }
                    }
              }
          catch(e) {
                
          //exception
              }
                  
          return "";
              };
              var delData 
          = function(name, domain_name, key){
                  ikey 
          = key || ikey;
                  domain 
          = domain_name || domain;
                  
          if(!isInit){initObj()};
              
          try {
                  
          if(isIE){
                      obj.load(ikey);
                      obj.removeAttribute(name);
                      obj.save(ikey);
                  }
          else if(window.globalStorage){
                      globalStorage[domain][ikey 
          + "__" + name] = undefined;
                      globalStorage[domain].removeItem(ikey 
          + "__" + name);
                  }
              }
          catch (e) {}
              };
              
          return {
                  setExp : setExpire,
                  set : setData,
                  get : getData,
                  del : delData
              };
          })();
          posted on 2010-01-06 22:28 jacklau 閱讀(247) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 南乐县| 历史| 鹿泉市| 鲁甸县| 平昌县| 忻城县| 郎溪县| 惠州市| 高雄县| 正阳县| 金阳县| 尉犁县| 绥滨县| 洮南市| 通化县| 固安县| 太原市| 咸阳市| 延边| 沅陵县| 京山县| 沈阳市| 登封市| 昆山市| 贡嘎县| 万年县| 大同市| 古丈县| 斗六市| 炎陵县| 平遥县| 郎溪县| 阿拉尔市| 华蓥市| 互助| 黑山县| 商都县| 双辽市| 洮南市| 鄂托克旗| 东源县|