2012-02-16 33 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