1

我有这个字符串,我正在尝试存储并获取到 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”,它返回了同样的错误......

根据 Microsoft 和 W3 的说法,IE8 应该支持 localStorage,所以有人知道问题出在哪里吗?太感谢了!

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

4

5 回答 5

6

据我了解,IE8 只为有效域提供存储。尝试将您的示例放在某个 Web 服务器中,它应该可以解决问题。

当我将它作为一个单独的文件进行测试时,我遇到了同样的问题,但是当我将它放在服务器中(在我的例子中是 Tomcat)时,它工作得很好。

于 2012-10-08T07:03:17.183 回答
3

检查您是否实际上处于 IE 8 模式 - 而不是怪癖或 IE 7 模式。最快的方法是按 F12 以调出开发工具,浏览器模式列在该选项卡的右上角。

于 2012-10-07T19:22:48.900 回答
1

我会使用window.localStorage作为镜头。请参阅IE的 Web 存储简介

于 2012-10-07T19:24:12.043 回答
0

你能在 IE 中打开开发者工具并检查那个 typeof json。stringify 和 json.parse 是函数,也是本地存储。我不确定 IE 上是否存在原生 JSON。

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

[编辑] 为您的代码jsfiddle.net/yrhdN/2添加了这个小提琴,一切似乎都运行良好。我在IE8兼容模式下测试过IE9)

[编辑] 关于这段代码的另一件事,似乎 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/

于 2012-10-07T19:45:39.173 回答
0

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

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

它在我的情况下有效。

于 2013-11-23T06:19:41.973 回答