2012-12-10 38 views
6

我正在編寫我的第一個chrome擴展,並且在幾個小時前剛開始這個擴展。當它被硬編碼時,一切運行良好。本質上,我填寫了一份8頁的表格。表單的每個頁面都對應一個單獨的內容腳本。內容用於腳本看起來像這樣:(發現田野裏是比較困難的,因爲他們不是標準,但我不會that..that部分作品擔心)將多個變量傳遞給內容腳本chrome

var first_name = 'John'; 
var last_name = 'Doe'; 
... 
... 
document.getElementById('first_name').value = first_name; 
document.getElementById('last_name').value = last_name; 

這個工作很好(對我而言),但我想將它分發給幾個人,他們都不會/可以使用源代碼中的擴展名,直接編輯變量。所以我做了一個'選項'頁面,以此爲例: https://developer.chrome.com/trunk/extensions/options.html

選項頁面是要填寫的表單的樣機,並且每個用戶都可以在此處輸入其默認值。我的save_options()函數基本上(僞代碼):

foreach(fields as field) { 
    localStorage[field] = document.getElement....(field); 
} 

這工作正常。它可以正確保存,顯示存儲的值等。

當我嘗試訪問內容腳本中的變量時,就會出現問題。從我讀過的內容來看,這不可能(直接)完成,並且網上有各種方法可以顯示如何做到這一點。我想要做這樣的事情(內容腳本):

var first_name = localStorage["first_name"]; 
var last_name = localStorage["last_name"]; 
... 
... 
document.getElementById('first_name').value = first_name; 
document.getElementById('last_name').value = last_name; 

我的問題是:

1)對於那些你們誰處理了Chrome擴展/ localStorage的/ chrome.storage /等,有一個'最好'的方式來做到這一點?

2)什麼是最有效的方法來設置所有的變量名稱/值?我更喜歡使用單獨的請求來設置每個字段的循環(如上所述)。我平均每頁10個字段。

(我大概可以使用http://developer.chrome.com/extensions/messaging.html長,凌亂的形式,但我希望有一個更有效的/可擴展/優雅的解決方案)

任何輸入的感謝!

+0

從我讀過你的代碼,內容腳本都不能訪問localStorage的(沙盒)。我錯過了什麼嗎? –

+1

噢,如果是這樣的話,你可以通過[message passing](http://developer.chrome.com/extensions/messaging.html)獲得一些東西到後臺腳本。 –

+0

chrome.extension.sendMessage({ greeting:「hello」 },function(response){ console.log(response.farewell); }); –

回答

8

一個解決方案是使用您提到的消息傳遞。

另一個(更好的,我認爲)解決方案是chrome.storage API(有關更多信息,請參閱http://developer.chrome.com/extensions/storage.html)。存儲API可以直接在後臺頁面和內容腳本中使用,如果您將值存儲在chrome.storage.sync之下,則Chrome會自動同步。從localStorage的唯一顯着不同的是,這個API是異步的,所以你必須寫這樣

chrome.storage.sync.get(['first_name', 'last_name'], function(items){ 
    document.getElementById('first_name').value = items['first_name']; 
    document.getElementById('last_name').value = items['last_name']; 
});