Очистить данные временного хранилища для расширения Chrome при закрытии браузера
Я создаю расширение, которое каждый раз при открытии браузера запрашивает у пользователя надежный пароль. Его цель состоит в том, что он использует этот пароль для получения и создания надежных паролей для новых веб-сайтов при регистрации и пытается восстановить те же пароли в следующий раз, когда пользователь посещает уже посещенный веб-сайт. Я использую метод ниже, чтобы сохранить мастер-пароль пользователя (используемый для генерации пароля), который является конфиденциальной информацией:
window.sessionStorage.setItem(varName)
И я использую метод ниже, чтобы получить его, когда это необходимо.
sessionStorage.getItem(varName)
Моя проблема в том, что я хочу, чтобы эти данные, которые хранятся в данных браузеров, были действительны, пока Chrome открыт. Этот мастер-пароль необходимо очищать каждый раз, когда пользователь закрывает браузер, и запрашивать его каждый раз при его повторном открытии. Я прочитал, что хранилище сеансов является временным, и оно очищается, но не работает для моего расширения. Я также знаю, что нечего добавить, чтобы обнаруживать закрытие браузера, когда он прекращает выполнение вашего скрипта. Не могли бы вы помочь мне с этим? Есть ли такой способ кратковременного хранения данных?
2 ответа
Поскольку в Manifest V3 было удалено понятие постоянных фоновых страниц. Вы можете имитировать это с помощью chrome.storage.local. Единственное предостережение относительно этого заключается в том, что он сохраняет переменную в локальном хранилище расширений, что по-прежнему подходит для этого пользователя.
Один из способов имитации закрытия браузера - создать chrome.runtime.port, который открывается, а затем, когда браузер закрывается или расширение перезагружается, он вызывает
onDisconnect
для этого порта, и вы можете очистить свой
chrome.storage.local.clear()
:
chrome.runtime.onConnect.addListener(port => port.onDisconnect.addListener(() => chrome.storage.local.clear()))
Когда браузер запущен, просто подключитесь:
chrome.runtime.connect(null, {})
Это может выгружаться, когда фоновый скрипт возвращается в спящий режим, к сожалению, единственный способ пройти, это сохранить всплывающее окно собственного управляемого расширения. Но это может быть излишним для пользовательского опыта.
Начиная с Chrome 102+, для расширений Chrome теперь существует API хранилища на основе сеансов. Он хранит данные в памяти.
https://developer.chrome.com/docs/extensions/reference/storage/#property-session