【问题标题】:identify XHR (ajax) response while listening to http response in firefox addon在 Firefox 插件中收听 http 响应时识别 XHR(ajax)响应
【发布时间】:2014-03-26 11:39:56
【问题描述】:

我有一个简单的 firefox 插件 (addon-sdk),如果响应的内容类型与一组内容类型匹配,它会侦听 http 响应并阻止。现在,当我对收听图像、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;
            }
}
}

【问题讨论】:

    标签: javascript ajax firefox firefox-addon


    【解决方案1】:

    notificationCallbacks请求nsIXMLHttpRequest接口

    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;
    }
    

    【讨论】:

    • 太棒了!!我们也可以用图像来做到这一点吗?我们可以用 Ci 区分框架载荷和非框架载荷吗?我们可以用什么来做这件事?我正在使用标志,这对我来说是一个令人困惑的解决方案。
    • 我猜测 try catch 是因为回调可能为空?这是真的?所以如果为 null 则没有 getInterace?
    • 图像检测可以通过MIME类型来完成。 getInterface 需要 try catch,如果找不到请求的接口,它将抛出。我不确定框架/非框架问题,他们不会返回不同的 DOM 窗口吗?
    • 你能举个例子吗我从来没有做过mime类型的东西+1虽然对于指针
    • 检查channel.contentType
    【解决方案2】:

    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
    

    请分享你感兴趣的任何发现,因为我也在学习

    【讨论】:

    • 这只是部分代码,我已经做了,我只是想识别xhr响应
    • 啊,我看到你根据标志过滤掉了。我不确定ajax,但是当你这样做时你必须找到一些组合,请让我知道我很感兴趣。您可以使用标志轻松检测图像等。生病编辑上面的解决方案
    猜你喜欢
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多