2013-12-17 2 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"}); 

проблемы я столкнулся в том, что после реализации возможности добавлять слова, статус либо не хранятся должным образом, или зависят от параметров, так как при Я пытаюсь получить его, у него нет значений «включено» или «отключено», как показано здесь:

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

Я не уверен в хранении хром, но API-интерфейсы хранения html5, как localstorage, так и sessionstorage предназначены для хранения ключей и значений, а не ключей и объектов.

Вам нужно будет укрепить объект слов, чтобы сохранить его как значение.

+1

Возможно, было бы лучше не отвечать на что-то, что вы не знаете, прежде чем смотреть на документацию. Такое предложение (что неверно, поскольку chrome.storage может хранить объекты) лучше подходит для комментария, а не для ответа. – gkalpak

+0

Конечно, вы имеете право на мнение. Возможно, это была бы лучшая идея, а также не использовать нисходящие спутники, чтобы выразить несогласие. Downvotes предназначены для выражения того, что ответ неправильный, а мой нет, если вы хотите прочитать. – amenadiel

+0

Мое мнение выражено в комментарии. Даунвит для неверного/низкого качества ответа: ** 1. ** ОП спрашивает о 'chrome.storage' -> вы говорите, что не знаете. ** 2. ** ОП спрашивает о 'хроме.хранилище' -> вы сообщаете информацию о локальном/sessionStorage (если кто-то спрашивает об аутентификации в JavaEE, и я отвечаю _ "Я не знаю о Java, но в PHP вы можете сделать это так и так" _, тогда мой ответ определенно неверно (или при очень низком качестве), даже если информация PHP действительна. – gkalpak

Смежные вопросы