2013-12-17 95 views
0

我正在研究Chrome擴展程序,該擴展程序會用不同詞語替換網站上的文字。 我允許用戶輸入他們自己的話說,他們希望進行更換,並且我保存這些是這樣的:如何爲Chrome擴展程序存儲多個選項?

function storeOptions(){ 
var words = new Object(); // storageArea.set() method takes an object that contains all the items to be stored. This Object contains those. 
$("option").each(function(key,value){ // .each(index, element) 
words[value.id] = value.text; 
chrome.storage.sync.set(words, function(){console.log("Stored: "+value.text);}); 
}); 
} 

之前,這是實現我成功地啓用和禁用與所使用的設置的browseraction延伸存儲在同一個storagearea以類似的方式:

chrome.storage.sync.set({"status":"enabled"}); 

我現在面臨的問題是,實現增加單詞的選項後,狀態或者沒有被妥善保存,或透過該選項的影響,因爲當我嘗試檢索它,它沒有「enabled」或「disabled」值,如下所示:

chrome.storage.sync.get("status", function(result) { 
    console.log("status: "+result["status"]); // status: status 
}); 

我在想,也許我可以存儲的單詞來替換爲所謂的像的方式數組:

chrome.storage.sync.set({"words" : words}); 

然後,我會通過獲取「身份」能夠在兩個分化或「單詞」,但那不起作用。

如何儲存狀態和單詞而不會相互干擾?

回答

3

您所描述的發生的唯一原因是,如果存在<option>元素,其編號爲status且值爲status(在這種情況下,它將覆蓋原始狀態)。

在任何情況下,(如你所說)一個好主意,在內部存儲對象(不一定是一個數組)「封裝」的所有期權相關的鍵值對。

(最後,沒有必要一個接一個來存儲值。這將是更有效的方法首先創建整個對象,然後將其與以chrome.storage.sync.set()單個調用存儲)。

function storeOptions() { 
    var words = {}; 
    $('option').each(function(idx, element) { 
     words[element.id] = element.text; 
    }); 
    chrome.storage.sync.set({ words: words }); 
} 

現在你storage.sync將尋找這樣的:

{ 
    "status": "enabled", 
    "words": { 
     "option_id1": "option_text1", 
     "option_id2": "option_text2", 
     ... 
    } 
} 

您可以檢索值這樣的:

/* Retrieve the extension status: */ 
chrome.storage.sync.get('status', function(items) { 
    var status = items.status; 
    ... 
}); 

/* Retrieve the words: */ 
chrome.storage.sync.get('words', function(items) { 
    var words = items.words; 
    for (var key in words) { 
     console.log('Replacing "' + key + '" with "' + words[key] + '"...'); 
     ... 
    } 
}); 
-1

我不確定鉻存儲,但html5存儲API,localstorage和sessionstorage都是用來存儲鍵和值,而不是鍵和對象。

您需要將您的單詞對象串起來以將其存儲爲值。

+1

在查看文檔之前,不應回答您不確定的事情可能更好。像這樣的建議(這是無效的,因爲chrome.storage可以存儲對象)更適合評論,而不是回答。 – gkalpak

+0

當然,您有權發表意見。這可能是一個更好的主意,也不是使用降價來表達分歧。 Downvotes旨在表達一個答案是錯誤的,而我不是,如果你喜歡閱讀。 – amenadiel

+0

我的意見是在評論中表達。 downvote是錯誤的/低質量答案:** 1。** OP詢問'chrome.storage' - >你說你不知道。 ** 2。** OP詢問'chrome。存儲' - >你給本地/ sessionStorage的信息(如果有人問在JavaEE中的身份驗證,我回復_「我不知道Java,但在PHP中,你可以這樣做,」_那麼我的答案是肯定的即使PHP信息是有效的,也是錯誤的(或者最好的質量極低) – gkalpak

相關問題