2012-06-24 184 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文件,它是工作正常。

感謝誰支持我在這裏

謝謝 米

相關問題