如何在Chrome扩展程序中完全卸载background.js?

时间:2015-11-11 17:33:51

标签: google-chrome-extension

我有一个Chrome扩展程序,可以将多个脚本注入页面,执行一些操作,并使用结果更新徽章文本和颜色。徽章文本仅针对当前活动标签更新

当我点击链接并转到相同标签中的其他页面时,徽章将重置为其原始状态。但是,background.js仍然存在并且很好,维护了上一页的状态变量。

在manifest.json中,我已经显式设置了persistent:false。

"background": {
        "scripts": ["background.js"],
        "persistent": false
    }

现在我用事件监听器强制强制它:

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
    chrome.runtime.reload();
});

并且这有效地卸载了扩展程序,但我很想知道为什么在URL更改background.js仍然存在且徽章更改没有。我错过了什么?

==========

编辑: 在前面的描述中没有提到我在后台脚本和内容脚本之间使用端口进行通信。但是,来自:https://developer.chrome.com/extensions/messaging

您可能想知道何时关闭连接,例如,如果您为每个打开的端口维护单独的状态。为此,您可以侦听runtime.Port.onDisconnect事件。当通道的另一侧手动调用runtime.Port.disconnect时会触发此事件,或者在卸载包含端口的页面时(例如,如果选项卡已导航),则会触发此事件。 onDisconnect保证对于任何给定的端口只能被触发一次。

导航更改应该关闭端口并卸载后台脚本吗?

1 个答案:

答案 0 :(得分:1)

非约会背景页面event page在约。 5秒不活动。

  

一旦事件页面空闲了很短的时间(几秒钟),就会调度runtime.onSuspend事件。在强行卸载之前,事件页面还有几秒钟来处理此事件。如果在此期间发生通常会导致加载事件页面的事件,则取消挂起并调度runtime.onSuspendCanceled事件。