使用nsITraceableChannel,注意你会得到一份正在加载的内容的副本。
如果您中止请求,那么它会中止给您一份副本。
这是我使用 nsITraceableChannel:https://github.com/Noitidart/demo-nsITraceableChannel
我想你想要的是这个:
const { Ci, Cu, Cc, Cr } = require('chrome'); //const {interfaces: Ci, utils: Cu, classes: Cc, results: Cr } = Components;
Cu.import('resource://gre/modules/Services.jsm');
Cu.import('resource://gre/modules/devtools/Console.jsm');
var observers = {
'http-on-examine-response': {
observe: function (aSubject, aTopic, aData) {
console.info('http-on-modify-request: aSubject = ' + aSubject + ' | aTopic = ' + aTopic + ' | aData = ' + aData);
var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
var requestUrl = httpChannel.URI.spec
if (requestUrl.indexOf('blah')) {
//httpChannel.cancel(Cr.NS_BINDING_ABORTED); //this is how you abort but if use redirectTo you don't need to abort the request
httpChannel.redirectTo(Services.io.newURI('http://www.anotherwebsite/', null, null));
}
},
reg: function () {
Services.obs.addObserver(observers['http-on-modify-request'], 'http-on-modify-request', false);
},
unreg: function () {
Services.obs.removeObserver(observers['http-on-modify-request'], 'http-on-modify-request');
}
}
};
//register all observers
for (var o in observers) {
observers[o].reg();
}
请注意,redirectTo 函数适用于 FF20+
https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIHttpChannel#redirectTo%28%29
因此,将此示例与 nsITraceableChannel 演示结合起来,您将拥有您想要的。
如果您不想重定向,您可以中止请求,获取请求的文档,然后 xmlhttprequest 新页面,它首先为您提供源并且不将其加载到选项卡,然后修改源然后加载它返回文档。
OR 代替 xmlhttprequesting 它,只是中止请求,重定向到新页面,然后修改选项卡。要获取频道的选项卡,请在此处查看解决方案:
Security Error when trying to load content from resource in a Firefox Addon (SDK)
还可以从扩展执行 http 请求,请参阅这个 sn-p:https://gist.github.com/Noitidart/9088113