获取响应标题/正文

时间:2011-10-10 12:39:22

标签: javascript firefox-addon http-headers

我正在开发一个firefox插件,我正在听这样的http响应:

var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(httpObserver, "http-on-examine-response", false);

调用我的httpObserver对象,如下所示:

var httpObserver =
{
 observe : function(aSubject, aTopic, aData) 
 {  
            aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);
            httpstatus = aSubject.responseStatus;
            if(httpstatus == 200 && aSubject.contentType.toString().indexOf("text/") != -1)
            {
                alert("URL: " + aSubject.name + "\r\nStatus: " + httpstatus + "\r\nContentType: " + aSubject.contentType); //Works great
                alert("Body: " + aSubject.responseText); //Is undefined, why?
            }
            else if(httpstatus == 404 && aSubject.contentType.toString().indexOf("text/html") != -1)
                alert("Page not found!\r\nURL: " + aSubject.name + "\r\nContentType: " + aSubject.contentType);
 }
};

我遇到以下问题:

我想从响应中获取整个正文和标题,但我不知道如何。 我曾经读过,服务器不在同一个域中可能是一个问题,但是firefox如何处理呢?

我已经做了很多研究,但我没有找到任何有用的东西,也许我错过了一些东西......

顺便说一句:如果有帮助,我也可以访问请求对象。

1 个答案:

答案 0 :(得分:3)

您可以使用nsITraceableChannel interface,它由所有HTTP请求实现。这允许您用自己的一个替换通道监听器,这样您就可以在将onDataAvailable调用中的数据传递给原始监听器之前将其读出。这里有一些示例代码:http://www.softwareishard.com/blog/firebug/nsitraceablechannel-intercept-http-traffic/