2011-11-20 73 views
0

我爲Chrome擴展程序使用本地存儲。當我設置使用本地存儲是否持久?

localStorage['tracking'] = false; 

本地存儲...然後檢查使用到的本地存儲設置:

if(localStorage['tracking']) 
{ 
    alert('set'); 
} else { 
    alert('Not Set'); 
    localStorage['tracking'] = true; 
} 

它工作正常。如果未設置並保持設置,它會將跟蹤設置爲true。但是,如果我轉到一個新選項卡,並轉到另一選項卡上的同一頁面,它將返回未設置狀態。

即使在瀏覽器關閉之後,本地存儲器還有什麼辦法保持持久性嗎?

編輯:我沒有設置頂部的localStorage數組元素,如果腳本。剛剛意識到可能會混淆讀者。

+1

本地存儲的整個想法是它是持久的。但是每個域都有專門的本地存儲。所以也許有兩個不同的選項卡(我的意思是空的,因爲不是空的,不同的地址當然不是)被認爲是不同的域,這就是爲什麼他們不共享數據。 –

+0

我在測試時使用相同的域名(Google.com)。 – GV1

+0

GV1,那裏有什麼運氣? –

回答

0

LocalStorage僅適用於字符串。檢查this的說明。

+0

我明白了。但是,爲什麼它仍然有效?如果我檢查localStorage中的數據,我可以看到跟蹤設置爲true。也許Chrome已經實現了localStorage以允許布爾值? – GV1

+0

'true'存儲爲'「true」'。當置於if語句中時,它的計算結果爲'true'。 –

0

我曾經有過同樣的問題。我想分享我的解決方案。但是,我的情況可能與您的情況不一樣。

我的情況是,我有這個代碼(localStrage ['xxxx'] ='xxx';)在內容腳本中。然後,我在打開新標籤或打開新窗口時遇到了問題。

所以,我的解決方案是,我沒有直接通過內容腳本運行此代碼。內容腳本將調用「chrome.extension.sendRequest」,background.html將設置/讀取localStrage並返回到內容腳本。

這將是內容腳本

chrome.extension.sendRequest({action: 'load'}, function (response) { 
      if(response){ 
        alert('set'); 
      } else { 
        alert('Not Set'); 
        chrome.extension.sendRequest({action: 'set',value:'true'}, function (response) {}); 
      } 
} 

代碼這將是background.html代碼。

chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) { 
    if (request.action == 'load') { 
     sendResponse(localStorage['tracking']); 

      }else if (request.action == 'set') { 
       localStorage['tracking']=request.value; 
      } 
    }); 
1

嘗試:

localStorage.setItem('tracking', false); 

localStorage.getItem('tracking'); 

這些是W3C API Specification使用的方法。

由於您提到的用法未指定,因此您可能正在向當前window對象中的localStorage全局變量添加新屬性,這些對象在從頁面導航時變得不可用。