2012-02-16 38 views
2

我一直試圖讓這個在IE8中工作,雖然它沒有抱怨這些,它完全忽略它們。Storage.prototype不能在IE8中工作

if(typeof(Storage) != "undefined"){ 
    Storage.prototype.setObject = function(key, value) { 
      this.setItem(key, escape(JSON.stringify(value))); 
    } 

    Storage.prototype.getObject = function(key) {  
     return JSON.parse(unescape(this.getItem(key))); 
    } 
} 

當我嘗試:

localStorage.setObject("key", <Some object>); 

我得到一個「對象不支持此方法」錯誤升起,功能甚至沒有叫。當然,這段代碼在Chrome和Firefox中也可以正常工作,甚至可能在1980年代的卡西歐手錶上。

任何幫助將是偉大的。

偶然和完全無關的IE8時,我讓我的對象後,我不得不JSON.parse兩次來獲取對象...

感謝 保羅

+1

看起來你不能在IE8中擴展存儲。我想你對此可能做得並不多。 – 2012-02-16 18:26:29

+0

我擔心的是這種情況,沒關係,我會按照您的建議創建一個單獨的函數來處理它。 – 2012-02-16 18:31:42

+0

'escape'和'unescape'沒有任何意義,再加上他們已經棄用了。 – epascarello 2015-11-24 13:16:47

回答

6

你會更好使用獨立的功能,而不是搞亂內置對象的原型。

function storeObject(key,obj) { 
    localStorage[key] = JSON.stringify(obj); 
} 
function retrieveObject(key) { 
    return JSON.parse(localStorage[key]); 
} 

這比原型操作更可靠,特別是在舊版瀏覽器中。

+1

最後一個實際的解釋。謝謝。 – Rob 2012-03-28 11:30:53