2011-04-04 30 views
1

好的,這是我的問題。我寫一個Chrome擴展,它幾乎完成,但問題是,例如:HTML5本地存儲,如何傳遞變量?

[頁popup.html]

localStorage["code"] = "alert('Hello!');"; 

[文件injection.js;這將在每次稱爲加載頁面時,內容腳本我覺得]

localStorage["code"] = (localStorage["code"] != undefined) ? localStorage["code"] : "alert('Default!');"; 
eval(localStorage["code"]); 

我曾嘗試2種方法,第一件事就是不開彈出,讓每一頁我打開將運行命令警報( 「默認!」);它的工作原理。然後我試着先加載彈出框,然後我意識到變量localStorage["code"]現在已到達我加載的頁面,而不是我的擴展。在一個快速解釋,在我的擴展,localStorage["code"] == "alert('Hello');";,但在http://google.comlocalStorage["code"] == "";或在http://facebook.comlocalStorage["code"] == "";

我的問題是,是否有無法將popup.tml存儲在popup.html中的localStorage [「code」]?

回答

3

三種是兩種本地存儲 - 一種屬於擴展本身(只能從背景頁面,彈出頁面或捆綁到擴展包中的任何頁面訪問),另一種屬於該站點(只能從內容腳本)。

因此,如果您需要訪問通過內容腳本在彈出窗口中設置的本地存儲值,則需要將請求發送到後臺頁面,然後讀取該值並將其發送回內容腳本。如何做到這一點在Message Passing doc中有解釋。

+0

背景頁面無法發送消息彈出。不知道爲什麼,但它不能。 – DataGreed 2011-08-27 19:06:20

+0

@DataGreed如果彈出窗口在某一時刻被關閉,它就不能使用。 – serg 2011-08-27 19:34:40

+0

但有沒有辦法將一個變量傳遞給一個關閉的彈出窗口?例如,我選擇頁面上的東西,然後我點擊彈出按鈕,並希望彈出窗口接收選擇? – DataGreed 2011-08-27 20:20:55

1

檢查了這一點:

內容腳本:

chrome.extension.sendRequest({ action : "getCode" }, function(response) { 
    alert(response.getCode); 
}); 

背景頁:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) 
{ 
    case "getCode": 
     sendResponse({ getCode: localStorage['code'] }); 
    break; 
} 
+0

嗨Sindar。你的代碼對我來說工作正常,但我有另一個問題。我讓人們改變了options.html頁面中的localStorage [「code」],所以無論何時他們改變它,我都會保存它,瀏覽器[只是background.html]不會發送更新代碼,直到瀏覽器重新啓動[這意味着background.html重新啓動]。他們對這個問題的想法也是如此。你的答案再次適用於我,只是另一個問題出現了![x] – xx3004 2011-04-06 14:38:31

+0

這是因爲你需要同步它;)只是爲了測試,在保存之前和之後放一個警報,你會看到;) – Sindar 2011-04-06 15:48:26

+0

我不明白,所以我只需要把這些代碼和它會自動同步? [X] – xx3004 2011-04-07 23:33:53