从扩展内的url获取html页面作为响应

时间:2014-04-15 17:47:08

标签: javascript html http xmlhttprequest firefox-addon

我正在开发一个扩展,其中无论发出什么请求,我都想更改请求参数并向服务器发送虚拟请求以获得响应。 例如。如果加载的原始请求是www.abc.com/eg.php?user="some code“,那么我想将其更改为www.abc.com/eg.php?user="ritubala”并获取html页面响应我的扩展程序内的进一步处理.. 我使用了以下网址中给出的这些代码 Return HTML content as a string, given URL. Javascript Function 但它导致递归... 所以简而言之,我想从我的扩展程序中的网址获取HTML代码... plz do help

1 个答案:

答案 0 :(得分:1)

使用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新页面,它为您提供源FIRST并且不将其加载到选项卡,然后修改源然后将其加载回DOCUMENT。

OR而不是xmlhttprequest它,只需中止请求,重定向到新页面,然后修改选项卡。获取频道的标签请在此处查看解决方案:

Security Error when trying to load content from resource in a Firefox Addon (SDK)

也可以从扩展程序执行http请求,请参阅以下代码段:https://gist.github.com/Noitidart/9088113