#google-chrome #google-chrome-extension #google-chrome-devtools #browser-extension
Вопрос:
Я создаю свое первое расширение Chrome. До сих пор все работает так, как ожидалось, за исключением одной проблемы: пользовательские параметры, которые пользователи могут устанавливать, продолжают сбрасываться по умолчанию каждый раз, когда браузер закрывается и перезапускается.
Как бы я мог предотвратить это, чтобы данные сохранялись даже после перезапуска браузера?:
Options.js
//On Submit
updateArray("add",newSchedule, name, true,scheduleIdKey)
//Where I attempt to update storage data that is meant to stay store and save even if browser restarts
function updateArray(addOrDelete, site, listName, isObject, objectTargetKey=null, valueTargetKey=null, newValue=null){
chrome.storage.sync.get(listName, function(data) {
var array = data[listName]?data[listName]:[];
if (addOrDelete == "add"){
if(!array.includes(site)){
array.push(site);
}
}
var jsonObj = {};
jsonObj[listName] = array;
chrome.storage.sync.set(jsonObj, function() {
console.log(data[listName]);
});
});
}
Background.js
chrome.runtime.onInstalled.addListener(function() {
//create default schedule
var defaultSchedule = {
"active":false,
}
chrome.storage.sync.set({
savedSchedules:[{"001":defaultSchedule}]
});
})
Комментарии:
1. Хранилище не сбрасывается само по себе. Только ваш код может это сделать. Например, в onInstalled вы перезаписываете сохраненные расписания, и они будут запускаться каждый раз, когда вы нажимаете значок перезагрузки на карте расширения. Могут быть и другие места, где вы используете
set
неверное значение, поэтому используйте отладчик devtools для установки точек останова и наблюдения за тем, что пишется. Обратите внимание, что если вы используете console.log, не забудьте JSON.parse(JSON.stringify(значение)), иначе он не будет отображать реальные данные.2. Итак, перезапуск приложения запускается
onInstalled
? Я не уверен, где это происходит. Должен ли я использовать другую функцию, чемset
? То, что я указал в вопросе, — это единственные места, где я пока устанавливаю хранилище. Пользователь вводит параметры, отправляет их, а затем background.js обновляет хранилище.3. Нет, в моем комментарии говорится: «он будет запускаться каждый раз, когда вы нажимаете значок перезагрузки на карте расширения», поэтому, если вы этого не сделаете, единственным решением будет его отладка. В любом случае отладка должна быть одним из основных инструментов.
4. Смотрите
reason
аргументonInstalled
обработчику: developer.chrome.com/docs/extensions/reference/runtime/…