Сохранение параметров расширения Chrome без закрытия модальных параметров

У меня есть расширение Chrome с параметрами, установленными через options_ui тег в файле manifest.json. Я могу сохранить параметры, однако я заметил, что модальные параметры должны быть закрыты для chrome.storage.sync.set Функция для завершения сохранения параметров. Как принудительно сохранить параметры после нажатия кнопки "Сохранить", даже если режим не закрыт?

options.js:

function save_options() {
  var hideAds = document.getElementById('hideAds').checked;

  chrome.storage.sync.set({
        hideAds: hideAds
  }, function() {
    // Update status to let user know options were saved
        var status = document.getElementById('status');
    status.textContent = 'Options successfully saved...';
    setTimeout(function() {
      status.textContent = '';
    }, 1000);
  });
}

// Restores checkbox state using the preferences stored in chrome.storage.
function restore_options() {
  // Use default values
  chrome.storage.sync.get({
        hideAds: false
  }, function(items) {
        document.getElementById('hideAds').checked = items.hideAds;
  });
}

document.addEventListener('DOMContentLoaded', restore_options);
document.getElementById('save').addEventListener('click', save_options);

manifest.json:

{
  "name": "Redesign",
  "version": "1.0",
  "manifest_version": 2,
  "options_ui": {
    "page": "options.html",
    "chrome_style": true
  }
}

РЕДАКТИРОВАТЬ: добавление приведенного ниже кода background.js, в котором не отображаются последние параметры (после нажатия кнопки "Сохранить" на странице параметров), если модальные параметры не закрыты. alert В строке ниже выводится старое сохраненное значение параметра... и новое сохраненное значение только после закрытия модального окна параметров.

chrome.tabs.onUpdated.addListener(function(tabId, info, tab) {
    if (info.status == 'complete') {
            chrome.storage.sync.get(['hideAds'], function(items) {

                if(typeof items.hideAds !== 'undefined') {
                   hideAds = items.hideAds;
                   alert(hideAds);
                }
            })
            doSomething(tab);
        }
});

1 ответ

Вы могли бы слушать chrome.storage.onChanged событие на фоновой странице (вам никогда не придется слушать chrome.tabs.onUpdated для получения значения хранилища), который срабатывает при изменении одного или нескольких элементов:

chrome.storage.onChanged.addListener(function(changes, areaName) {
    if(areaName === 'sync') {
        const hideAdsChange = changes['hideAds'];
        if(typeof hideAdsChange !== 'undefined') {
            const newValue = hideAdsChange.newValue;
            console.log(newValue);
        }
    }
});
Другие вопросы по тегам