Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Не сохраняет значения в chrome.storage.local (https://javascript.ru/forum/css-html/85669-ne-sokhranyaet-znacheniya-v-chrome-storage-local.html)

Arigato 16.12.2023 20:38

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


Как побороть?

voraa 16.12.2023 22:11

Меня очень смущает строка 9
Может все же так должно быть
chrome.storage.local.set({[param]: value}, function() {

Arigato 16.12.2023 23:01

voraa, благодарю, моя невнимательность...


Часовой пояс GMT +3, время: 11:56.