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

Javascript 在firefox插件中侦听http响应时识别XHR(ajax)响应,javascript,ajax,firefox,firefox-addon,Javascript,Ajax,Firefox,Firefox Addon,我有一个简单的firefox插件(插件sdk),它监听http响应并阻止响应的内容类型是否匹配一组内容类型。现在,当我对聆听图像、javascript文件和ajax(XHR)响应不感兴趣时,观察者会聆听所有响应。我能否以某种方式过滤掉或至少找出响应属于XHR请求,这样我就不会在处理响应时浪费资源 类似的事情也可以在chrome扩展中实现,其中“details.type”可以是主框架、图像、xhr等 httpResponseObserver = { observe: function(

我有一个简单的firefox插件(插件sdk),它监听http响应并阻止响应的内容类型是否匹配一组内容类型。现在,当我对聆听图像、javascript文件和ajax(XHR)响应不感兴趣时,观察者会聆听所有响应。我能否以某种方式过滤掉或至少找出响应属于XHR请求,这样我就不会在处理响应时浪费资源

类似的事情也可以在chrome扩展中实现,其中“details.type”可以是主框架、图像、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;
            }
}
}
channel.cancel(组件.results.NS\u绑定\u中止)

因此,请在返回行之前输入以下内容:)

要检测什么样的请求,ie image ajax u必须检查标志: 请参阅此处的代码doctrl+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
请分享您感兴趣的任何发现,因为我也在学习。取消(组件。结果。NS_绑定_中止)

因此,请在返回行之前输入以下内容:)

要检测什么样的请求,ie image ajax u必须检查标志: 请参阅此处的代码doctrl+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

请分享您对im学习感兴趣的任何发现

通知回调请求
nsIXMLHttpRequest
接口

var-isXHR;
试一试{
var channel=subject.QueryInterface(Ci.nsIHttpChannel);
var callbacks=channel.notificationCallbacks;
var xhr=callbacks?callbacks.getInterface(Ci.nsIXMLHttpRequest):null;
isXHR=!!xhr;
}
捕获(e){
isXHR=假;
}

通知回调请求
nsimmlhttprequest
接口

var-isXHR;
试一试{
var channel=subject.QueryInterface(Ci.nsIHttpChannel);
var callbacks=channel.notificationCallbacks;
var xhr=callbacks?callbacks.getInterface(Ci.nsIXMLHttpRequest):null;
isXHR=!!xhr;
}
捕获(e){
isXHR=假;
}

这只是代码的一部分,我已经这么做了,我只想识别xhr响应,因为我看到您根据标志过滤掉了它。我对ajax不太确定,但你必须找到一些组合,当你这样做的时候,请让我知道我感兴趣。您可以使用标志轻松检测图像等。我会在上面编辑解决方案它只是代码的一部分,我已经做了,我只想识别xhr响应,我看到你根据标志过滤掉它。我对ajax不太确定,但你必须找到一些组合,当你这样做的时候,请让我知道我感兴趣。您可以使用标志轻松检测图像等。我将编辑解决方案!!我们也可以用图像来做吗?我们能用Ci区分框架荷载和非框架荷载吗?我们能用什么做这些?我使用的是标志,这对我来说是一个令人困惑的解决方案。我之所以使用try-catch是因为回调可能是空的?这是真的吗?因此,如果为空,则没有getInterace?图像检测可以通过MIME类型完成。try catch是
getInterface
所必需的,如果找不到请求的接口,它将抛出。我不确定帧/非帧问题,他们会返回不同的DOM窗口吗?请举例说明我从未为pointerCheck
频道做过mime类型的东西+1。contentType
很棒!!我们也可以用图像来做吗?我们能用Ci区分框架荷载和非框架荷载吗?我们能用什么做这些?我使用的是标志,这对我来说是一个令人困惑的解决方案。我之所以使用try-catch是因为回调可能是空的?这是真的吗?因此,如果为空,则没有getInterace?图像检测可以通过MIME类型完成。try catch是
getInterface
所必需的,如果找不到请求的接口,它将抛出。我不确定帧/非帧问题,他们会返回不同的DOM窗口吗?请举例说明我从未为pointerCheck
channel.contentType做过mime类型的东西+1