Хранение и поиск данных в расширении chrome - PullRequest
0 голосов
/ 05 мая 2020

Я создаю расширение chrome, в котором мне нужно использовать хранилище данных. Работа расширения выглядит следующим образом:

  • Расширение захватывает URL-адрес любого запроса на получение или отправку
  • Если URL-адрес уже присутствует в паре ключ: значение в качестве ключа затем я получаю значение и как-то показываю его в браузере
  • Если URL-адрес отсутствует в хранилище, я вызываю API, который выполняет некоторые операции с URL-адресом и возвращает ответ. Затем я сохраняю пару URL-ответа как ключ: значение в хранилище. Причина, по которой я делаю это, чтобы мне не приходилось вызывать API в следующий раз, когда появится тот же URL. Тогда я просто проверю свое хранилище.

Я написал следующий код для установки значений в хранилище.

chrome.storage.sync.set({user_url: show_action}, function() {
    console.log('Key is ' + user_url);
    console.log('Value is set to ' + show_action);
});

Переменная user_url содержит URL-адрес, полученный из запроса. show_action переменная содержит ответ на вызов API. Я пытаюсь получить значение, используя следующий код:

chrome.storage.sync.get([user_url], function(result) {
    console.log(result);
    console.log('Value currently is ' + result.user_url);
    if(result.user_url == null || result.user_url == undefined)
        call_api = true;
    else
        show_action = result.user_url;
});

Это не работает должным образом. Я получаю пустой result без пар ключ-значение с user_url в качестве ключа. Хотя он должен быть там, потому что я устанавливаю значение перед извлечением. Затем я попытался поместить user_url в качестве строкового литерала в вызове get следующим образом:

chrome.storage.sync.get(["user_url"], function(result) {
    console.log(result);
    console.log('Value currently is ' + result.user_url);
});

Когда это будет сделано, результат в журнале консоли будет примерно таким:

{user_url: true}
user_url: true
Value currently is true

Итак, сам user_url устанавливается как ключ, а не значение в нем. Мой вопрос: как мне установить URL-адрес в качестве ключа, и когда я звоню по URL-адресу, я получаю желаемый результат? А также как справиться с ситуацией, когда я звоню по URL-адресу, но его нет в хранилище?

1 Ответ

1 голос
/ 05 мая 2020

Похоже, что в этой строке chrome.storage.sync.set({user_url: show_action} user_url не переводится автоматически и считается ключом объекта, который вы передаете в chrome.storage.sync.set.

Вы можете сделать это следующим образом:

let data = {};
data[user_url] = show_action;

chrome.storage.sync.set(data, function() {
    console.log('Key is ' + user_url);
    console.log('Value is set to ' + show_action);
});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...