Chrome会跟踪应用或扩展程序添加了侦听器的事件。当它调度此类事件时,将加载事件页面。相反,如果应用或扩展程序通过调用removeListener删除了事件的所有侦听器,则Chrome将不再加载该事件的事件页面。
因为侦听器本身仅存在于事件页面的上下文中,所以每次加载事件页面时都必须使用addListener;只有在runtime.onInstalled本身是这样做是不够的。
所以我注册一个只存在于事件页面上下文中的侦听器,然后chrome会在事件发生时加载事件页面?如果页面当前被卸载并且因此未定义侦听器,它如何触发侦听器?最重要的是,我如何实际实现事件页面?
答案 0 :(得分:1)
要实现事件页面设置清单的背景部分,请执行以下操作:
"background": {
"scripts": [
...
"/scripts/background.js"
],
"persistent": false
},
"persistent": false
将其设为活动页面。
在background.js中,您将添加如下所示的侦听器和函数:
// event: display or focus options page
function onIconClicked() {
bgUtils.showOptionsTab();
}
// event: process the state when someone has changed the storage
function onStorageChanged(event) {
bgUtils.processState(event.key);
}
// listen for click on the icon
chrome.browserAction.onClicked.addListener(onIconClicked);
// listen for changes to the stored data
addEventListener('storage', onStorageChanged, false);
Chrome会自动完成剩下的工作。
有两点需要注意:
如果您需要访问后台页面,请勿使用chrome.extension.getBackgroundPage()
。请改用chrome.runtime.getBackgroundPage()
。它是异步的,确保加载事件页面。
您的活动页面中不能包含全局变量。如果您需要保持全局状态,则需要使用其中一个存储API。
答案 1 :(得分:0)
这个让我困惑很久的答案是,Chrome的“缓存”听众,这基本上意味着它仍然被定义为正常。 “仅在事件页面的上下文中”仅表示您的页面必须在每次运行时定义它,其中第一个页面将位于runtime.onInstalled
。