Javascript Chrome扩展如何获得后台脚本关闭的通知?

Javascript Chrome扩展如何获得后台脚本关闭的通知?,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,让我解释一下。我的Google Chrome扩展将其状态保存在Chrome.storage.local持久存储中。数据量可能相当大(在JSON布局中高达数MB),因此我不会在每次发生更改时调用chrome.storage.local.set(),以最小化扩展对其运行的系统的影响。相反,我在后台每隔30秒保存一次计时器 这个后台保存过程发生在后台脚本中,只要我的扩展正在运行,它就会一直留在内存中。(我在manifest.json文件中设置了“background”:{“persistent”:tr

让我解释一下。我的Google Chrome扩展将其状态保存在
Chrome.storage.local
持久存储中。数据量可能相当大(在JSON布局中高达数MB),因此我不会在每次发生更改时调用
chrome.storage.local.set()
,以最小化扩展对其运行的系统的影响。相反,我在后台每隔30秒保存一次计时器

这个后台保存过程发生在后台脚本中,只要我的扩展正在运行,它就会一直留在内存中。(我在
manifest.json
文件中设置了
“background”:{“persistent”:true}
。)

当我的扩展重新安装或卸载时,会发生此问题,因为在30秒保存之间的某些状态丢失


所以我想知道是否有什么方法可以让我跟踪背景脚本即将关闭的时刻?(这样我就可以保存我的应用程序的状态。)

您可以通过侦听器截获以下内容的更新:

当更新可用时触发,但由于应用程序当前正在运行,因此不会立即安装。如果不执行任何操作,则下次卸载后台页面时将安装更新,如果希望更快地安装,则可以显式调用chrome.runtime.reload()。如果您的扩展使用的是持久后台页面,那么后台页面当然永远不会被卸载,因此除非您手动调用chrome.runtime.reload()以响应此事件,否则在下次chrome自身重新启动之前,更新不会被安装。如果没有处理程序正在侦听此事件,并且您的扩展有一个持久的后台页面,那么它的行为就像调用chrome.runtime.reload()响应此事件一样

至于卸货。。如果你的意思是被用户禁用,可能没有办法进行清理,但请不要引用我的话

即使使用持久页面,甚至
window.onunload
,您也可以尝试收听。我不知道,只是抛砖引玉。在这两种情况下,你清理的时间都非常有限


如果您想在浏览器关闭时进行清理,您可以尝试使用
“background”
权限播放,并监听正在创建和关闭的窗口。这样你就可以延长浏览器关闭后的使用寿命,除非用户明确禁用后台应用。

谢谢你的建议。我尝试了
chrome.runtime.onSuspend
,据我所知,它没有被调用
window.onunload也没有被调用来重新加载扩展,但是从我所能找到的情况来看,当Chrome本身关闭时,它可能被调用。嗯。有趣的是,没有统一的通知,哈?显式扩展重新加载/禁用类似于拔下电源线。所以截获的希望很小,但这种情况不应该正常发生。用户可以进入设置->扩展,然后单击我的应用程序的“重新加载(Ctrl+R)”链接。这并不罕见,是吗?很大程度上取决于你的用户是谁。不,用户通常不会这样做。