如何让 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 的缺点是它目前只对 Chrome beta 和 dev 频道的用户可用,并且不如 webRequest API 灵活(规则是声明性的,所以您不能对 DWR 不支持的请求处理做出运行时决策 API)。
解决此问题的另一种方法是使用 chrome.tabs.query
查找在启动扩展程序之前打开的选项卡。
您可以尝试为您的分机提供 background
permission:
Makes Chrome start up early and and shut down late, so that apps and extensions can have a longer life.
When any installed hosted app, packaged app, or extension has "background" permission, Chrome runs (invisibly) as soon as the user logs into their computer—before the user launches Chrome. The "background" permission also makes Chrome continue running (even after its last window is closed) until the user explicitly quits Chrome.
这样 Chrome 进程和扩展将在您单击任何 URL 之前加载。用户仍然可以通过显式终止 Chrome 进程来规避此问题。
作为旁注,请记住,如果您想阻止请求,您的 onBeforeRequest
侦听器的响应需要同步,因此您不能根据来自的响应做出阻止的决定本机消息传递主机。
我正在为 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 的缺点是它目前只对 Chrome beta 和 dev 频道的用户可用,并且不如 webRequest API 灵活(规则是声明性的,所以您不能对 DWR 不支持的请求处理做出运行时决策 API)。
解决此问题的另一种方法是使用 chrome.tabs.query
查找在启动扩展程序之前打开的选项卡。
您可以尝试为您的分机提供 background
permission:
Makes Chrome start up early and and shut down late, so that apps and extensions can have a longer life.
When any installed hosted app, packaged app, or extension has "background" permission, Chrome runs (invisibly) as soon as the user logs into their computer—before the user launches Chrome. The "background" permission also makes Chrome continue running (even after its last window is closed) until the user explicitly quits Chrome.
这样 Chrome 进程和扩展将在您单击任何 URL 之前加载。用户仍然可以通过显式终止 Chrome 进程来规避此问题。
作为旁注,请记住,如果您想阻止请求,您的 onBeforeRequest
侦听器的响应需要同步,因此您不能根据来自的响应做出阻止的决定本机消息传递主机。