如何让chrome.webRequest.onBeforeRequest.addListener()在Chrome启动时启动?

时间:2015-03-24 05:00:30

标签: javascript google-chrome-extension

我正在开发利用本机消息传递主机的Chrome扩展程序。我的background.js立即注册一个监听器来处理所有onBeforeRequest事件(即所有请求)并将它们传递给本机帮助应用程序。在Chrome启动后访问某个页面时,这一切都很好,但是当我点击启动Chrome的网址时,我的听众就不会触发。

这是我的background.js顶部的监听器的基本结构:

chrome.webRequest.onBeforeRequest.addListener(function (details) {
    alert('forwarding request!');
    chrome.runtime.sendNativeMessage('<extension name>', { url: details.url });
}, { urls: ['http://*', 'https://*'] }, ['blocking']);

显然,有些条件决定是否在Chrome中传递请求并阻止它,但它们在此处不相关。即使没有sendNativeMessage位,我也无法为点击以启动Chrome实例的网址生成警报。

在启动时第一个请求之前注册此侦听器的任何聪明方法都会通过?

2 个答案:

答案 0 :(得分:2)

解决问题的一种方法是使用chrome.declarativeWebRequest API以声明方式注册webRequest侦听器。此API的缺点是,它目前仅适用于测试版和开发者渠道的Chrome用户,并且不如webRequest API灵活(规则是声明性的,因此您无法对不受支持的请求处理做出运行时决策通过DWR API)。

解决此问题的另一种方法是使用chrome.tabs.query查找在启动扩展程序之前打开的标签。

答案 1 :(得分:2)

您可以尝试为您的扩展程序background permission

  

让Chrome尽早启动并延迟关闭,以便应用和扩展程序可以延长使用寿命。

     

当任何已安装的托管应用,打包的应用或扩展程序具有&#34;背景&#34;在用户启动Chrome之前,Chrome会在用户登录计算机后立即运行(无形)。 &#34;背景&#34;权限还会使Chrome继续运行(即使在最后一个窗口关闭后),直到用户明确退出Chrome。

这样,点击任何网址之前都会加载Chrome进程和扩展程序。用户仍然可以通过明确终止Chrome进程来解决此问题。

作为旁注,请注意,如果要阻止请求,onBeforeRequest侦听器的响应需要同步,因此您无法根据响应来阻止响应本机消息传递主机。