2

每次访问某个站点时,我都会尝试获取 http 响应标头。我认为使用像下面这样的观察者就足够了:

const OBS = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService); 
let httpRequestObserver ={ 
      observe: function(subject, topic, data){
          var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
        if (topic == "http-on-examine-response") {
          headers=httpChannel.getAllResponseHeaders();  
        }
      }
    };

在启动方法中添加它,然后在关闭时将其删除:

OBS.addObserver(httpRequestObserver, "http-on-examine-response", false);//startup methode

OBS.addObserver(httpRequestObserver, "http-on-examine-response", false);//shutdown

但我在日志中得到了这个:

JavaScript Error: "httpChannel.getAllResponseHeaders is not a function"

我是不是走错了路,操作比看起来更复杂?这是针对 android 的 firefox 的扩展,我没有使用 sdk。谢谢你的帮助。

4

1 回答 1

1

nsIHttpChannel不是XMLHttpRequest。取而代之XMLhttpRequest的是一个很好的围绕通道的包装类——不仅仅是 http 的——它还添加了方便的功能,例如getAllResponseHeaders().

你可以nsIHttpChannel.visitResponseHeaders用来模拟getAllResponseHeaders

if (subject instanceof Ci.nsIHttpChannel) {
  var headers = "";
  subject.visitResponseHeaders(function(header, value) {
    headers += header + ": " + value + "\r\n";
  });
}
于 2013-09-08T04:25:44.103 回答