Подтвердить что ты не робот

Chrome.storage.local.get и установить

Я пытаюсь использовать chrome.storage.local в своем расширении, и он, похоже, не работает. Я использовал localStorage, но понял, что не могу использовать его в сценариях контента на нескольких страницах.

Итак, вот что я придумал:

function save()
{
    var channels = $("#channels").val();
    var keywords = $("#keywords").val();

    chrome.storage.local.set({'channels': channels});
    chrome.storage.local.set({'keywords': keywords});
}

Я действительно верю, что делаю save() правильно, но проблема возникает в load():

function load()
{
    var channels = "";
    chrome.storage.local.get('channels', function(result){
        channels = result;
        alert(result);
    });

    var keywords = "";
    chrome.storage.local.get('keywords', function(result){
        keywords = result;
        alert(result);
    });

    $("#channels").val(channels);
    $("#keywords").val(keywords);
}

Когда срабатывает предупреждение, он выводит [object Object]. Почему это? Что я делаю не так? Я посмотрел документацию/примеры, но я не могу точно определить проблему.

4b9b3361

Ответ 1

Этот код работает для меня:

function load() {
    var channels = "";
    var keywords = "";
    chrome.storage.local.get('channels', function (result) {
        channels = result.channels;
        alert(result.channels);
        $("#channels").val(channels);
    });
} 

Chrome.storage.local.get() возвращает объект с элементами в своих сопоставлениях с ключом, поэтому вам нужно использовать индекс ключа в своем шаблон поиска.

IMP:

Благодаря Rob для идентификации: Chrome.storage.local.get() асинхронный, вы должны изменить свой код, чтобы убедиться, что они работают после завершения обратного вызова().

Сообщите мне, если вам нужна дополнительная информация.

Ответ 2

отладить или использовать

alert(JSON.stringify(result));

для более подробной информации о том, что вы получаете назад

Ответ 3

Значение "результат", которое вы используете, является объектом, который содержит значение хранилища, чтобы получить значение, которое вы должны использовать result.keywords, которое получит значение ключевых слов. EX:

function load(){
  chrome.storage.local.get('keywords', function(result){
    var keywords = result.keywords;
    alert(keywords);
  });

  chrome.storage.local.get('channels', function(result){
    var channels = result.channels;
    alert(channels);
  });
}