Показать сообщение отдельно
  #1 (permalink)  
Старый 16.12.2023, 20:38
Аспирант
Отправить личное сообщение для Arigato Посмотреть профиль Найти все сообщения от Arigato
 
Регистрация: 11.12.2011
Сообщений: 42

Не сохраняет значения в chrome.storage.local
Есть 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);


Как побороть?
Ответить с цитированием