2013-10-21 79 views
1

我正在使用html5的localStorage API。localStorage無法傳輸數據,不適用於所有瀏覽器

這種情況是,用戶點擊一個按鈕「添加到我的列表」,以便她可以保存到列表中的位置名稱。

以下代碼僅適用於Chrome。適用於一個窗口,並且如果兩個或多個窗口從同一個源打開。 如果只有一個窗口在Firefox和IE中打開,則可以正常工作。如果有多個窗口,在IE中不會獲取數據。在Firefox中,如果點擊添加名稱,則添加約30次。

我試圖根據我找到的例子來實現我的代碼。

我該如何解決這個問題?

在此先感謝。

<input type="button" value="Add to my list" onClick="savepoi(document.getElementById('name').innerHTML);"/>          

<script> 

//listen if a storage happened to another window and call the right function 
if (window.attachEvent) { // IE8 support 
    window.attachEvent('onstorage', storageEvent);} 
else 
{window.addEventListener('storage', storageEvent, true);} 

function storageEvent(event) { 
//if something is added 
    if(event.oldValue==null) 
    {savepoib(event.newValue);} 
} 


function savepoi(a){ 
    //if no localStorage, set firs key=1, else add 1 to the existing 
    //save key and name together 
    if(localStorage.length==0) 
    {localStorage.setItem(1,1+"-"+a);} 
    else 
    {localStorage.setItem((localStorage.length+1),(localStorage.length+1)+"-"+a);} 

} 

function savepoib(a){ 
    //split to get key and name 
    var b =a.split("-"); 
    var idi=b[0];//key 
    var myname = b[1];//name 

    if(localStorage.length==0) 
    {localStorage.setItem(1,1+"-"+myname);} 
    else 
    {localStorage.setItem(idi,idi+"-"+myname);} 
} 
</script> 

回答

0

存儲事件是一團糟。我已經做了一些工作,事情並不一致。 Chrome只在其他窗口中啓動事件,Firefox在所有窗口中啓動,包括髮生更改的窗口和IE,我不記得是什麼問題。總之,這裏是我用來抹平差異的代碼(這是我的store2.js庫插件):

https://github.com/nbubna/store/blob/master/src/store.bind.js

希望有所幫助。爲了一致的行爲,我考慮使用postMessage或類似的東西來僞造存儲事件,但是我從來沒有時間追查這個想法,看看它是否真的可行。

+0

哦,是的,我記得,大多數IE實現,我試圖解僱存儲事件,但事件是缺乏信息,沒有newValue或oldValue或任何東西。但是這是IE10之前我正在做這個測試。事情可能已經改變。 –

相關問題