Есть popup окно с настройкой параметров расширения. Надо сохранить выбранные пользователем параметры, после чего получить к ним доступ из content script.
Для сохранения значений применил chrome.storage.local, однако ничего не сохраняется, если вызывать chrome.storage.local.set на событие change (то есть когда пользователь меняет параметры).
Если сохранить значение вне обработчика событий, то они сохраняются.
Вот код:
// Параметры расширения
var ytpParams = ["name", "images", "date"];
// Изменить значение параметра
function ytpSetParam(param) {
if (ytpParams.includes(param)) {
let value = document.getElementById(param).value;
alert(`${param}: ${value}`);
chrome.storage.local.set({param: value}, function() {
chrome.storage.local.get(ytpParams, function(result) {
alert(JSON.stringify(result));
});
});
}
}
// Загрузка параметров расширения
function ytpLoadParams() {
chrome.storage.local.get(ytpParams, function(result) {
alert(JSON.stringify(result));
ytpParams.map((param) => {
if (param in result) {
let value = result[param];
document.getElementById(param).value = value;
}
});
});
}
// Обработчик событий изменения параметров
function ytpOnChanges() {
ytpParams.map((param) => {
document.getElementById(param).addEventListener("change", () => {ytpSetParam(param)});
});
}
function ytpDOMContentLoaded() {
ytpLoadParams();
ytpOnChanges();
}
addEventListener("DOMContentLoaded", ytpDOMContentLoaded);
Как побороть?