Почему я не могу получить chrome .storage мгновенно в всплывающем окне? - PullRequest
0 голосов
/ 29 апреля 2020

Если я пытаюсь получить chrome .storage.syn c из всплывающего окна, мне нужно открыть его дважды для обновления.

https://developer.chrome.com/extensions/storage Вот "учебник" "который я использую, чтобы сделать это.

Я установил некоторые chrome .storage.syn c данные в контент-скриптах следующим образом:

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

И после этого я открываю свой всплывающее окно с кодом на init:

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

Это работает, но мне нужно дважды открыть свое всплывающее окно, чтобы увидеть обновление данных.

Всплывающее окно - vue приложение, и мне нужно назначить chrome. Хранить данные в состоянии vuex, но я не знаю, как это сделать. Я трачу на это много дней, и, наконец, я не могу решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Вам нужно дождаться разрешения вызова chrome.storage.sync.set, прежде чем вы сможете использовать геттер.

const promisifiedSet = () => new Promise((resolve) => {
  chrome.storage.sync.set(`{key: value}, () => {
    resolve();
  });
});

// Can now use async/await to wait for the set to finish before calling get.
document.addEventListener('DOMContentLoaded', async () => {
  await promisifiedSet();

  chrome.storage.sync.get(['key'], function(result) {
    console.log('Value currently is ' + result.key);
   });
});
0 голосов
/ 29 апреля 2020

Попробуйте result вместо result.key, например:

chrome.storage.sync.get(['key'], function(result) {
          console.log('Value currently is ' + result);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...