在firefox插件中监听http响应时识别XHR(ajax)响应

时间:2014-03-26 11:39:56

标签: javascript ajax firefox firefox-addon

我有一个简单的firefox插件(addon-sdk),如果内容类型的响应与一组内容类型匹配,它会侦听http resposes和blocks。现在,当我对收听图像,javascript文件和ajax(XHR)响应不感兴趣时​​,观察者会收听所有响应。我可以以某种方式过滤掉或至少发现响应属于XHR请求,这样我就不会浪费资源来处理响应。

在chrome扩展中可以实现类似的功能,其中" details.type"可以是main_frame,image,xhr等。

httpResponseObserver =  
{  
  observe: function(subject, topic, data)  
  {  

    if (topic == "http-on-examine-response") 
    {
        var channel = subject.QueryInterface(Ci.nsIHttpChannel); 
        var contentType;
        try {
                contentType = channel.getResponseHeader('Content-Type');
                if (/\b(?:xml|rss|javascript|vnd|json|html|text|image|ocsp|x-shockwave-flash)\b/.test(contentType))
                {
                    return;
                } 
            } 
        catch(error) {
                return;
            }
}
}

2 个答案:

答案 0 :(得分:3)

nsIXMLHttpRequest

请求notificationCallbacks界面
var isXHR;

try{
  var channel = subject.QueryInterface(Ci.nsIHttpChannel);
  var callbacks = channel.notificationCallbacks;
  var xhr = callbacks ? callbacks.getInterface(Ci.nsIXMLHttpRequest) : null;
  isXHR = !!xhr;
}
catch(e){
  isXHR = false;
}

答案 1 :(得分:1)

channel.cancel(Components.results.NS_BINDING_ABORTED);

所以把它放在你的回归线之前,如果:)

检测什么样的请求,即图像ajax你必须检查标志: 看这里的代码做ctrl + f处理并查看那些标志

对于ajax / xhr我做过一段时间的测试,这是标志的组合来识别它:

LOAD_REQUESTMASK |
LOAD_BACKGROUND |
INHIBIT_PIPELINE |
LOAD_EXPLICIT_CREDENTIALS |
DISPOSITION_ATTACHMENT
//so tested on w3schools, if flags come out to be this above, then it is an ajax request, can have INHIBIT_CACHING flag

PLZ分享你对我学习感兴趣的所有发现