“'localStorage'为null或不是对象”IE8中的错误

时间:2012-10-07 19:19:52

标签: javascript html5 internet-explorer-8 local-storage

我有这个字符串,我正在尝试存储并转到localStorage,并从中检索以便它可以显示。 这是我的代码:

var datas = new Array;
if (navigator.appName !== 'Microsoft Internet Explorer'){
    var qsVal = document.getElementsByClassName("val");
}
else{
    var qsVal = document.querySelectorAll('.val');
}
if (navigator.appName !== 'Microsoft Internet Explorer'){
    var qsKey = document.getElementsByClassName("key");
}
else{
    var qsKey = document.querySelectorAll('.key');
}
var storedPlays;
var stuff = document.getElementById("stuff");

function pushArray(){
    for (var i=0, len = qsVal.length; i < len; i++){
    thisValue = qsVal[i].value;
    thisKey = qsKey[i].value;
    datas.push([thisValue,thisKey]);
    }
localStorage.setItem('datas', JSON.stringify(datas));
}

function showStuff(){
    storedPlays = JSON.parse(localStorage.getItem('datas'));
    document.getElementById("stuff").innerHTML = storedPlays;
}

它适用于FF和Chrome,但当我调用'showStuff'时,IE8会返回“'localStorage'为null或不是对象”。

有趣的是,当我调用'pushArray'时,它没有给我一个错误,它也使用'localStorage'。

我也试过使用“window.localStorage”而不仅仅是“localStorage”,它返回了同样的错误......

根据微软和W3的说法,IE8应该支持localStorage,所以有没有人知道问题出在哪里? 万分感谢!

编辑 - This是代码的jsfiddle。出于某种原因,它没有那么好用,只是为了让你感觉一下代码......

5 个答案:

答案 0 :(得分:6)

根据我的理解,IE8仅为有效域提供存储。尝试将您的示例放在某个Web服务器上,它应该解决问题。

当我将其作为单个文件进行测试时,我遇到了同样的问题,但是当我把它放在服务器中时(在我的情况下是Tomcat)它运行正常。

答案 1 :(得分:3)

检查您是否实际处于IE 8模式 - 而不是怪癖或IE 7模式。最快的方法是点击F12打开开发工具,浏览器模式列在该标签的右上角。

答案 2 :(得分:1)

我会使用 window.localStorage 作为镜头。有关IE的信息,请参阅Introduction to Web Storage

答案 3 :(得分:0)

您可以在IE中打开开发人员工具并检查该类型的json。 stringify和json.parse是函数,也是localstorage。我不确定IE上是否存在原生JSON。

另外,为什么要在循环中设置对象,不应该在它之外?

<强> [编辑] 为你的代码jsfiddle.net/yrhdN/2添加了这个小提琴,一切似乎都运行正常。我已经在IE9下在IE8兼容模式下进行了测试)

<强> [编辑] 关于这段代码的另一件事,似乎showStuff()中的innerHtml不适用于段落。将html从p更改为div并使用innerText会使事情变得更好:

<div id="stuff">
</div>


function showStuff(){
    var storedPlays    = JSON.parse(localStorage.getItem('datas'));
    document.getElementById("stuff").innerText = storedPlays;
}

这似乎只发生在IE中。这是一个更新的小提琴:http://jsfiddle.net/yrhdN/7/

答案 4 :(得分:0)

如果您不希望任何本地服务器应用程序拍摄网页,请尝试此操作。

  • 在脚本中查找代码:window['localStorage'] !== null
  • 将其更改为:window['localStorage'] != null

它适用于我的情况。