我正在尝试捕获和处理网页或其中的插件即将发出的每个请求。例如,如果您打开控制台并启用网络日志记录,当即将发送 HTTP 请求时,控制台会在此处显示。我想捕获每个链接并调用我的函数,即使 Flash 播放器加载了视频(如果它是http也登录控制台)。谁能指导我应该做什么,或者我应该从哪里开始?
编辑:我希望能够取消请求并在需要时以我的方式处理它。
我正在尝试捕获和处理网页或其中的插件即将发出的每个请求。例如,如果您打开控制台并启用网络日志记录,当即将发送 HTTP 请求时,控制台会在此处显示。我想捕获每个链接并调用我的函数,即使 Flash 播放器加载了视频(如果它是http也登录控制台)。谁能指导我应该做什么,或者我应该从哪里开始?
编辑:我希望能够取消请求并在需要时以我的方式处理它。
我相信,您可以使用 Jetpack SDK 来获得大部分您需要的东西。如果你注册到系统事件并监听http-on-modify-request,你可以使用 nsIHttpChannel 方法来修改响应和请求
let { Ci } = require('chrome');
let { on } = require('sdk/system/events');
let { newURI } = require('sdk/url/utils');
on('http-on-modify-request', function ({subject, type, data}) {
if (/google/.test(subject.URI.spec)) {
subject.QueryInterface(Ci.nsIHttpChannel);
subject.redirectTo(newURI('http://mozilla.org'));
}
});
附加信息,“拦截页面加载”
非 sdk 版本,并且有更多的控制和细节:这使您也可以查看标志,因此您只能查看框架和主窗口的 LOAD_DOCUMENT_URI。主窗口始终为 LOAD_INITIAL_DOCUMENT_URI
https://github.com/Noitidart/demo-on-http-examine
https://github.com/Noitidart/demo-nsITraceableChannel - 在这个你可以在浏览器解析之前看到源代码
在这些示例中,您还将看到如何从主题中获取 contentWindow 和 browserWindow,您可以将其应用于 sdk 示例,只需使用“主题”
我也更喜欢使用 http-on-examine-response,即使在 sdk 版本中也是如此。因为否则您将看到它重定向的所有页面,而不是最终重定向到的页面。说一个网址 blah.com 将您重定向到 blah.com/1 然后 blah.com/2
只有 blah.com/2 有一个文档,所以在修改时你会看到 blah.com 和 blah.com/1,它们会有标志 LOAD_REPLACE,通常它们会立即重定向,所以文档永远不会显示,如果是定时重定向,你会查看文档,还会看到 LOAD_INITIAL_DOCUMENT_URI 标志,我猜我自己没有经历过