#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, {})
Это может выгрузиться само по себе, когда фоновый скрипт снова перейдет в спящий режим, к сожалению, единственный способ пройти его-сохранить всплывающее окно управляемого расширения. Но это может быть излишним для пользовательского опыта.