Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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);


Как побороть?
Ответить с цитированием
  #2 (permalink)  
Старый 16.12.2023, 22:11
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Меня очень смущает строка 9
Может все же так должно быть
chrome.storage.local.set({[param]: value}, function() {
Ответить с цитированием
  #3 (permalink)  
Старый 16.12.2023, 23:01
Аспирант
Отправить личное сообщение для Arigato Посмотреть профиль Найти все сообщения от Arigato
 
Регистрация: 11.12.2011
Сообщений: 42

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать значения переменной из одного фрейма в другой в Google Chrome Freestyle007 Events/DOM/Window 17 20.06.2019 14:28
Почему возвращает значения RGB каналов? Black_Star jQuery 14 06.02.2017 04:49
Input type="time" + JS +Safari (iPhone) dpts Opera, Safari и др. 0 21.09.2016 07:24
Input type="time" + JS +Safari (iPhone) dpts Opera, Safari и др. 0 21.09.2016 07:24
Множественные значения в input - ЗА ВОЗНАГРАЖДЕНИЕ! Pb160 Events/DOM/Window 0 03.08.2015 12:29