浏览器关闭时清除 Chrome 扩展程序的临时存储数据

问题描述

我正在构建一个扩展程序,每次打开浏览器时都会要求用户输入强密码。其目的是在注册时使用该密码为新网站派生和生成强密码,并尝试在用户下次访问已访问过的网站时重新生成相同的密码。 我使用以下方法来存储用户的主密码(用于生成密码),这是敏感信息:

window.sessionStorage.setItem(varName)

我使用以下方法在需要时获取它。

sessionStorage.getItem(varName)

我的问题是,只要 Chrome 打开,我希望存储在浏览器数据中的这些数据就有效。每次用户关闭浏览器时都需要清除此主密码,并且每次重新打开时都需要询问此主密码。 我读到会话存储是临时的,它会被清除,但它不适用于我的扩展。我也知道没有什么可以添加来检测浏览器在停止运行脚本时关闭的。 你能帮我吗?有没有这种短时间保存数据的方法

解决方法

由于 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,{})

当后台脚本重新进入睡眠状态时,这可能会自行卸载,不幸的是,唯一可以通过的方法是保持弹出的自己的托管扩展窗口。但这对用户体验来说可能有点过头了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...