繁体   English   中英

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

[英]How to get chrome.webRequest.onBeforeRequest.addListener() to fire at Chrome startup?

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

这是我的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实例的URL生成警报。

在启动第一个请求之前,是否有任何聪明的方法来注册此侦听器?

解决该问题的一种方法是使用chrome.declarativeWebRequest API声明式注册一个webRequest侦听器。 此API的缺点是目前仅在beta和dev通道上可供Chrome用户使用,并且不如webRequest API灵活(规则是声明性的,因此您无法对不支持的请求处理做出运行时决策通过DWR API)。

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

您可以尝试为扩展程序提供background 权限

使Chrome提前启动,然后延迟关闭,从而使应用和扩展程序的使用寿命更长。

如果任何已安装的托管应用程序,打包应用程序或扩展程序具有“后台”权限,则只要用户登录到计算机(在用户启动Chrome之前),Chrome就会(不可见地)运行。 “后台”权限还可以使Chrome继续运行(即使在关闭最后一个窗口之后),直到用户明确退出Chrome为止。

这样,在您单击任何URL之前,将加载Chrome进程和扩展程序。 用户仍然可以通过明确终止Chrome进程来规避此问题。

附带说明一下,请记住,如果您想阻止请求,则onBeforeRequest侦听器的响应必须是同步的,因此您不能基于来自本机消息传递主机的响应来决定是否阻止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM