我正在开发利用本机消息传递主机的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实例的网址生成警报。
在启动时第一个请求之前注册此侦听器的任何聪明方法都会通过?
答案 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
侦听器的响应需要同步,因此您无法根据响应来阻止响应本机消息传递主机。