Как предотвратить сброс параметров расширения Chrome при перезапуске браузера?

#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/…