Очистите данные временного хранилища для расширения Chrome при закрытии браузера

#google-chrome-extension #session-storage #google-chrome-storage #chrome-sync

Вопрос:

Я создаю расширение, которое каждый раз при открытии браузера запрашивает у пользователя надежный пароль. Его цель состоит в том, что он использует этот пароль для получения и генерации надежных паролей для новых веб-сайтов при регистрации, и он пытается восстановить те же пароли в следующий раз, когда пользователь посещает уже посещенный веб-сайт. Я использую приведенный ниже метод для хранения мастер-пароля пользователя(используемого для генерации пароля), который является конфиденциальной информацией:

 window.sessionStorage.setItem(varName)
 

И я использую приведенный ниже метод, чтобы получить его всякий раз, когда это необходимо.

 sessionStorage.getItem(varName)
 

Моя проблема в том, что я хочу, чтобы эти данные, хранящиеся в данных браузеров, были действительны до тех пор, пока Chrome открыт. Этот мастер-пароль необходимо очищать каждый раз, когда пользователь закрывает браузер, и запрашивать его при каждом повторном открытии.
Я читал, что хранилище сеансов является временным, и оно очищается, но оно не работает для моего расширения. Я также знаю, что нечего добавить, чтобы обнаружить, что браузер закрывается, когда он перестает запускать ваш скрипт.
Не могли бы вы, пожалуйста, помочь мне с этим? Существует ли такой метод, который сохраняет данные в течение короткого времени?

Комментарии:

1. Просто используйте глобальную переменную в постоянном фоновом сценарии.

2. @wOxxOm Спасибо за ваше предложение, но есть некоторые другие метаданные, которые я получаю с сервера и использую в определенных частях.

3. Храните его также в глобальной переменной.

Ответ №1:

Начиная с Манифеста V3 было удалено понятие постоянных фоновых страниц. Вы можете имитировать это с помощью chrome.storage.local. Единственное предостережение в отношении этого заключается в том, что он хранит переменную в локальном хранилище расширений, которое по-прежнему подходит для этого пользователя.

Один из способов имитировать закрытие браузера-создать открытый порт chrome.runtime., а затем, когда браузер закроется или расширение будет перезагружено, он вызовет onDisconnect этот порт, и вы сможете очистить свой chrome.storage.local.clear() :

 chrome.runtime.onConnect.addListener(port => port.onDisconnect.addListener(() => chrome.storage.local.clear()))
 

Когда браузер будет запущен, просто подключитесь:

 chrome.runtime.connect(null, {})
 

Это может выгрузиться само по себе, когда фоновый скрипт снова перейдет в спящий режим, к сожалению, единственный способ пройти его-сохранить всплывающее окно управляемого расширения. Но это может быть излишним для пользовательского опыта.