2011-05-03 140 views
7

我正在尋找一個存儲機制,將堅持跨網站。我有我需要存儲的基本數據類型數字/字符串。 localStorage不適用於我,因爲它屬於相同的原產地策略。我需要我的數據在所有網站上都是相同的,但很多都是特定於標籤並通過內容訪問。Chrome擴展替代本地存儲?

有人可以提出一個合適的機制來實現這一目標嗎?

編輯: 我目前正在實施第一個答案代碼,並沒有太多看。我有以下...

background.html

注:tabStorage是這個函數的類變量

function store(){ 
    chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    if(request.req == "save") { 
     tabStorage[sender.tab.id] = request.data; 
     } 

    if(request.req == "load") { 
     sendResponse(tabStorage[sender.tab.id]); 
    } 
    }); 
} 

contentscript.js

響應返回undefined

chrome.extension.sendRequest({req: "load"}, function(response) { 
      console.log("getting stak"); 
      console.log(response.data); 
}); 

我做錯了什麼?該代碼正在訪問加載和保存,所以我知道它是在那裏並返回,但未定義返回。爲什麼?

+0

至少評論,如果你要downvote。 – Skizit 2011-05-04 09:26:00

回答

9

您需要使用從後臺頁面訪問的擴展自己的localStorage。如果您在內容腳本中需要此信息,則需要使用messaging將請求發送到後臺頁面,然後在該頁面中讀取並在響應中將結果發送回內容腳本。

UPDATE 如果您不需要存儲來保存瀏覽器之間的值,然後重新啓動你不需要的localStorage。只需將所有內容存儲在背景頁面中,並通過其ID標識標籤。只要打開瀏覽器,後臺頁面將保留這些值。例如:

內容腳本:

//save 
chrome.extension.sendRequest({cmd: "save", data: {param1: "value1", param2: "value2"}); 
... 
//load 
chrome.extension.sendRequest({cmd: "load"}, function(response) { 
    console.log("tab data:", response) 
}); 

背景頁:

var tabStorage = []; 
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    if(request.cmd == "save") { 
     tabStorage[sender.tab.id] = request.data; 
    } 

    if(request.cmd == "load") { 
     sendResponse(tabStorage[sender.tab.id]); 
    } 
}); 
+0

背景頁面不會讓我保持每個標籤的基礎上,對吧?我需要不同標籤的不同值。 – Skizit 2011-05-03 16:38:36

+0

@Skizit你是什麼意思的標籤域或實際選項卡? – serg 2011-05-03 16:42:30

+0

我的意思是像瀏覽器中的選項卡一樣的實際選項卡。我希望每個選項卡都有自己的存儲空間。 – Skizit 2011-05-03 16:44:48

相關問題