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

Clear temporary storage data for a Chrome extension when browser closes

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

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

当后台脚本重新进入休眠状态时,这可能会自行卸载,不幸的是,通过它的唯一方法是保留您自己的托管扩展 window 弹出。但这对用户体验来说可能有点矫枉过正。

从 Chrome 102+ 开始,现在有一个基于会话的存储 API 用于 Chrome 扩展。它将数据存储在内存中。

https://developer.chrome.com/docs/extensions/reference/storage/#property-session