2012-06-24 138 views
0

我正在使用localStorage。我的代码完全适用于Chrome,但不适用于IE9和Firefox。localStorage不能在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> 

,当我试图使用Firebug调试Firefox中的代码,我得到的错误在不同的线路。我完全糊涂了这里:)

下面是代码,我正在错误:

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; 
    } 
} 

而且我在Mozilla Firefox得到的错误是:

target is undefined 
[Break On This Error] 

alert("target = " + target.id); 

我宣布在

<body id="pageBody"> 

太多困惑

目标3210
+1

能错字可能会导致您的问题的人呢? 'if(typeof(Storage)!==“undifined”){'Undefined拼写错误。不知道这是如何在Chrome中工作。这是你真实的,真实的代码吗? – jmort253

+1

你在使用localhost吗? localstorage只能在HTTP网站上使用。 –

+1

@ eric.itzhak localhost通过http(我在本地主机上使用了localStorage),你可能意指文件系统 – Musa

回答

3

您检查本地存储是否存在的方式有点非正统,可能实际上无法检测到旧版浏览器没有本地存储。下面,您有这码错别字,如“undifined”:

var storage = window.localStorage; 
//alert ("cacheKey = " + cacheKey + " ,cacheValue = " + cacheValue); 
if(typeof(Storage)!=="undifined"){ 
    localStorage.setItem("cacheKey","cacheValue"); 
} 

相反,这里是检查localStorage的是提供正确的方法:

if(window.localStorage) { 
    localStorage.setItem("cacheKey","cacheValue"); 
} 

虽这么说,实际上并不是在这种情况下造成你的问题。相反,你指出,调试器发现错误在这条线:

if(k.length < 1) { return; } 

您也看到以下错误:

SCRIPT5007: Unable to get value of the property 'length': object is null or undefined sample_1.html, line 157 character 3 

的信息,该错误信息的关键部分是,对象为空。换句话说,你传入一个空值作为参数k的参数!

DOMContentLoaded事件不会传入此参数;因此,您现在可以简单地使用全局变量,您可以在restoreContents函数中访问这些变量。

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

localStorage.setItem(cacheKey, cacheValue); 

这可能不是你代码中的所有问题,但这应该让你开始。我可以告诉你最新的最好,最实用的提示,因为我可以告诉你这是新的,了解如何使用这些浏览器调试器并学会识别错误消息的含义。如果必要,Google会显示错误消息。如果您可以学习使用这些工具,您会发现识别某些问题变得更容易,然后提出解决方案。祝你好运! :)

+0

和omri都非常感谢你的建议我会尽我所能的水平来解决这个问题,如果它不是再次解决我会发布的问题来自何处非常感谢所有给我的支持 – maha

+0

玛哈,不客气。如果您将来遇到问题,请记住花时间写下您的问题,并确保包括您尝试的内容,期望看到的内容以及收到的错误消息。再次,阅读这些调试器;)当你掌握它们的时候,你会发现它们帮助你将问题缩小到更小的块,这对你(以及对你有帮助的人)来说看起来不那么令人感到压倒。祝你好运,我们很乐意帮助!:) – jmort253

+0

非常感谢:) – maha

2

这项工作在任何浏览器? 你有“cacheValue”作为一个字符串, typeof存储将永远不会等于“未定义”(可能undefined), 和变量selectedKey从未定义。

+0

嗨jmort (e,k){ \t \t // alert(“test”);当我试着在iexplore中调试时, \t \t if(k.length <1){return; } \t var mySavedList = localStorage [“key_”+ k]; \t \t \t 如果(mySavedList =未定义!){ \t的document.getElementById(e)中.innerHTML = mySavedList; \t} \t} 当我在IE9调试我收到错误该特定线 如果(k.length <1){返回; } – maha

+0

@maha - 你应该在你的问题的评论中遵循我的建议,并使用编辑功能将这个细节添加到你的问题。这非常有帮助! ;) – jmort253

+0

@maha - 另外,请添加错误说的内容。错误实际上意味着什么,对于理解问题很重要。 – jmort253

0

我已经试过几个步骤:)为localStorage的,我们需要的HTTP则仅会在IE9

工作

在Tomcat的帮助但最后我创建的http:从那里我已经运行了localStorage的HTML文件,它是工作正常。

感谢谁支持我在这里

谢谢 米

相关问题