Chrome活动页面的工作原理是什么?

时间:2016-03-26 02:39:20

标签: google-chrome google-chrome-extension

来自developer.chrome.com

  

Chrome会跟踪应用或扩展程序添加了侦听器的事件。当它调度此类事件时,将加载事件页面。相反,如果应用或扩展程序通过调用removeListener删除了事件的所有侦听器,则Chrome将不再加载该事件的事件页面。

     

因为侦听器本身仅存在于事件页面的上下文中,所以每次加载事件页面时都必须使用addListener;只有在runtime.onInstalled本身是这样做是不够的。

所以我注册一个只存在于事件页面上下文中的侦听器,然后chrome会在事件发生时加载事件页面?如果页面当前被卸载并且因此未定义侦听器,它如何触发侦听器?最重要的是,我如何实际实现事件页面?

2 个答案:

答案 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