如何在chrome启动时激发chrome.webRequest.onBeforeRequest.addListener(
How to get chrome.webRequest.onBeforeRequest.addListener() to fire at Chrome startup?
我正在为Chrome开发一个利用本地消息主机的扩展。我的background.js立即注册一个监听器来处理所有onBeforeRequest事件(即所有请求),并将它们传递给本机助手应用程序。当Chrome启动后访问页面时,这一切都很好,但当我点击启动Chrome的URL时,我的侦听器不会启动。
以下是我的背景.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生成警报。
有什么聪明的方法可以在启动时的第一个请求通过之前注册这个侦听器吗?
您可以尝试给予扩展background
权限:
使Chrome启动得早,关闭得晚,这样应用程序和扩展程序的使用寿命就更长了。
当任何安装的托管应用程序、打包应用程序或扩展程序具有";背景";权限,用户一登录计算机,Chrome就会(无形地)运行——在用户启动Chrome之前。";背景";权限还使Chrome继续运行(即使在其最后一个窗口关闭后),直到用户明确退出Chrome。
这样,Chrome进程和扩展将在您单击任何URL之前加载。用户仍然可以通过显式终止Chrome进程来规避这一点。
顺便说一句,请记住,如果您想阻止请求,来自onBeforeRequest
侦听器的响应需要同步,因此您不能基于来自本机消息传递主机的响应来决定阻止。
解决问题的一种方法是使用chrome.declarativeWebRequest
API以声明方式注册webRequest侦听器。这种API的缺点是,它目前仅在beta和dev频道上对Chrome用户可用,并且不如webRequest API灵活(规则是声明性的,因此您不能对DWR API不支持的请求处理做出运行时决定)。
解决此问题的另一种方法是使用chrome.tabs.query
查找在启动扩展之前已打开的选项卡。
- Chrome WebKitGetUserMedia
- JQueryhide()不适用于Mozzilla,但适用于Chrome
- 在chrome.tabs.onCreated之后加载HTML页面
- chrome扩展中的navigator.geolocation.getCurrentPosition
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- chrome扩展更改主机/域警告
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 如何在chrome扩展中重定向到html页面
- Chrome扩展没有't在重新加载之前考虑期权价值
- Google/html5语音识别JavaScript SDK Chrome网络工具包SpeechRecognition
- 激活chrome上的chrome.notifications对象
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- JS可以在Chrome中工作,但不能在Firefox中工作
- Chrome加载旧版本的Javascript文件
- 试图阻止Chrome通过扩展关闭
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- chrome.webRequest.onBefore重定向不停止重定向