我有这个字符串,我正在尝试存储并转到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。出于某种原因,它没有那么好用,只是为了让你感觉一下代码......
答案 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
它适用于我的情况。