Сохранение параметров расширения 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);
}
}
});