Javascript 本地存储在IE9和Firefox中不工作

Javascript 本地存储在IE9和Firefox中不工作,javascript,firefox,internet-explorer-9,local-storage,Javascript,Firefox,Internet Explorer 9,Local Storage,我正在使用localStorage。我的代码在Chrome上运行得很好,但在IE9和Firefox上却不行 代码如下: document.addEventListener("DOMContentLoaded", restoreContents, false); document.getElementsByTagName("body")[0].onclick=function(){saveContents('myList','contentMain', event, this);}; funct

我正在使用localStorage。我的代码在Chrome上运行得很好,但在IE9和Firefox上却不行

代码如下:

document.addEventListener("DOMContentLoaded", restoreContents, false);
document.getElementsByTagName("body")[0].onclick=function(){saveContents('myList','contentMain', event, this);};

function amIclicked(e, eleObject)
{
    alert("amIClicked");
    e = e || event;
    var target = e.target || e.srcElement;
    alert("target = " + target.id);
    if(target.id=='pageBody' || target.id=='Save')
        return true;
    else
        return false;
}

function saveContents(e, d, eveObj, eleObject) {
    //alert("saveContents");
    if (amIclicked(eveObj, eleObject)) {
        var cacheValue = document.getElementById(e).innerHTML;
        var cacheKey = "key_" + selectedKey;
        var storage = window.localStorage;
        //alert ("cacheKey = " + cacheKey + " ,cacheValue = " + cacheValue); 
        if(typeof(Storage)!=="undifined"){
        localStorage.setItem("cacheKey","cacheValue");
        }
        //alert ("Saved!!"); 
        var dd = document.getElementById(d);
        //document.getElementById("contentMain").style.display == "none";       
        dd.style.display = "none";
    }
}

function restoreContents(e,k) {
    //alert("test");
    if(k.length < 1) { return; }
    var mySavedList = localStorage["key_" + k];

    if (mySavedList != undefined) {
        document.getElementById(e).innerHTML = mySavedList;
    }
}


    <a onclick="ShowContent('contentMain','myList','Sample_1'); return true;" href="#" >Sample 1</a><br/><br/>
    <a onclick="ShowContent('contentMain','myList','Sample_2'); return true;" href="#" >Sample 2</a><br/><br/>

    <div style="display:none;display:none;position:absolute;border-style: solid;background-color: white;padding: 5px;"id="contentMain">
    <ol id="myList" contenteditable="true">
        <li>Enter Content here</li>
    </ol>
<!--<input id="editToggleButton" type="button" value="Edit"/>-->
</div>
我在Mozilla Firefox中遇到的错误是:

 target is undefined
[Break On This Error]   

alert("target = " + target.id);
我已经宣布了目标

<body id="pageBody">


太过混乱了

检查本地存储是否存在的方式有点不正常,实际上可能无法检测到传统浏览器没有本地存储。下面,此代码中有拼写错误,例如“未定义”:

相反,以下是检查本地存储是否可用的正确方法:

if(window.localStorage) { 
    localStorage.setItem("cacheKey","cacheValue"); 
}
话虽如此,但在这种情况下,这并没有造成你的问题。相反,您指出调试器在此行中发现了一个错误:

if(k.length < 1) { return; }
该错误消息中的关键信息是对象为null。换句话说,您正在传递一个空值作为参数k的参数

DOMContentLoaded事件未传入此参数;因此,现在只需使用一个全局变量可能是最简单的,您可以从
restoreContents
函数中访问它

另外,正如@omri在他的回答中指出的,+1顺便说一句,您将cacheKey作为字符串传递到localStorage,而不是作为表示密钥的实际变量。这是正确的用法:

localStorage.setItem(cacheKey, cacheValue);

这可能不是代码中的所有问题,但这应该可以帮助您开始。我能为您推荐的最好、最有用的技巧是,学习如何使用浏览器调试器,并学会识别错误消息的含义,因为我可以告诉您这是一个新手。如果有必要,用谷歌搜索错误消息。如果你能学会使用这些工具,你会发现识别某些问题并提出解决问题的计划会变得容易得多。祝你好运!:)

检查本地存储是否存在的方式有点不正常,实际上可能无法检测到传统浏览器没有本地存储。下面,此代码中有拼写错误,例如“未定义”:

相反,以下是检查本地存储是否可用的正确方法:

if(window.localStorage) { 
    localStorage.setItem("cacheKey","cacheValue"); 
}
话虽如此,但在这种情况下,这并没有造成你的问题。相反,您指出调试器在此行中发现了一个错误:

if(k.length < 1) { return; }
该错误消息中的关键信息是对象为null。换句话说,您正在传递一个空值作为参数k的参数

DOMContentLoaded事件未传入此参数;因此,现在只需使用一个全局变量可能是最简单的,您可以从
restoreContents
函数中访问它

另外,正如@omri在他的回答中指出的,+1顺便说一句,您将cacheKey作为字符串传递到localStorage,而不是作为表示密钥的实际变量。这是正确的用法:

localStorage.setItem(cacheKey, cacheValue);

这可能不是代码中的所有问题,但这应该可以帮助您开始。我能为您推荐的最好、最有用的技巧是,学习如何使用浏览器调试器,并学会识别错误消息的含义,因为我可以告诉您这是一个新手。如果有必要,用谷歌搜索错误消息。如果你能学会使用这些工具,你会发现识别某些问题并提出解决问题的计划会变得容易得多。祝你好运!:)

这在任何浏览器中都有效吗?! 您将“cacheValue”作为字符串, 存储类型永远不会等于“未定义”(可能未定义),
而且变量selectedKey从未定义。

这在任何浏览器中都有效吗?! 您将“cacheValue”作为字符串, 存储类型永远不会等于“未定义”(可能未定义),
而且变量selectedKey从未定义过。

我已经尝试了几个步骤:)对于本地存储,我们需要http,只有它在IE9中才能工作

但最后,在Tomcat的帮助下,我创建了http:从那里我运行了localstorage html文件,它工作得很好

谢谢在这里支持我的人

多谢各位
m

我已经尝试了几个步骤:)对于本地存储,我们需要http,只有它才能在IE9中工作

但最后,在Tomcat的帮助下,我创建了http:从那里我运行了localstorage html文件,它工作得很好

谢谢在这里支持我的人

多谢各位
m

打字错误可能是导致您出现问题的原因吗
if(typeof(Storage)!==“Undefined”){
Undefined拼写错误。不确定这在Chrome中是如何工作的。这是您实际的、真实的代码吗?您正在使用localhost吗?localstorage仅在HTTP网站上可用。@eric.itzhak localhost通过HTTP(我在localhost上使用过localstorage)你大概是说filesystem@eric.itzhak-
文件://
!=
http://localhost
。它不起作用的地方是根本没有Web服务器,而您使用的是文件协议。Localhost仍然使用http,应该可以工作。我的意思是FileTystem,我的坏:)打字错误可能是导致您出现问题的原因吗?
if(typeof(Storage)==“Undefined”){
Undefined拼写错误。不确定这在Chrome中是如何工作的。这是您真实的代码吗?您正在使用localhost吗?localstorage仅在HTTP网站上可用。@eric.itzhak localhost通过HTTP(我在localhost上使用过localstorage)你大概是说filesystem@eric.itzhak-
文件://
!=
http://localhost
。它不起作用的地方是根本没有Web服务器,而您使用的是文件协议。Localhost仍然使用http,应该可以工作。我的意思是FileTystem,我的坏:)hi jmort,当我尝试在iexplore函数restoreContents(e,k)中调试时{//alert(“test”);if(k.length<1){return;}var mySavedList=localStorage[“key_”+k];if(mySavedList!=undefined){document.getElementById(e).innerHTML=mySavedList;}}}当我在ie9中调试时,如果(k.length<1){return;}@maha-您应该遵循下面的命令,我会得到这一行错误