我正在尝试捕获并处理网页或其中的插件即将发布的每个请求。 例如,如果您打开控制台并启用Net日志记录,则在即将发送HTTP请求时,控制台会在那里显示它。 我想捕获每个链接并调用我的功能,即使Flash播放器加载了一个视频(如果它是 http ,也会登录到控制台)。 任何人都可以指导我应该做什么,或者我应该从哪里开始?
编辑:我希望能够取消请求并在需要时按照我的方式处理。
答案 0 :(得分:10)
我相信您可以使用Jetpack SDK来获取您需要的大部分内容。如果您注册system events并收听http-on-modify-request,则可以使用nsIHttpChannel方法modify响应并请求
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'));
}
});
其他信息," Intercepting Page Loads"
答案 1 :(得分:2)
非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版本中也是如此。因为否则你会看到它重定向的所有页面,而不是最终的重定向TO。比如说一个url blah.com将你重定向到blah.com/1然后再告诉blah.com/2
只有blah.com/2有一个文件,所以修改你看到blah.com和blah.com/1,他们将有标志LOAD_REPLACE,通常他们立即重定向所以文件永远不会显示,如果它是一个定时重定向你会看到文件,也会看到LOAD_INITIAL_DOCUMENT_URI标志,我猜我自己没有经历过