2

「http-on-modify-request」でオブザーバーを使用して、HTTP リクエスト (および対応する他のオブザーバーとの応答) を分析しています。

HTTPリクエスト/レスポンスがメインフレームの読み込み(実際のページDOM)かどうかを判断することはできますか? 別のリソース (画像、css、sub_frame など) とは対照的に。

4

1 に答える 1

1

ドキュメントには、ここで探している答えのほとんどが含まれており、addon-sdk で使用するために以下に変更しました。

場所と場所を比較することで、IFRAME を監視できtop.documentます。

画像の読み込みなどを検出する簡単な方法はないと思うので、IFRAME ではない最初のヒットだけを監視し、それ以外はすべて css/image/script コンテンツの読み込みと見なすことをお勧めします。

var chrome = require("chrome");

var httpmods = {
  observe : function(aSubject, aTopic, aData) {
    console.log("observer", aSubject, aTopic, aData);
      aSubject.QueryInterface(chrome.Ci.nsIHttpChannel);
      var url = aSubject.URI.spec;

      var dom = this.getBrowserFromChannel(aSubject);
      if (dom) { 
        if (dom.top.document && dom.location === dom.top.document.location) {
          console.log("ISN'T IFRAME");
        } else {
          console.log("IS IFRAME");
        }
      }
  },
  getBrowserFromChannel: function (aChannel) {
    try {
      var notificationCallbacks =
        aChannel.notificationCallbacks ? aChannel.notificationCallbacks : aChannel.loadGroup.notificationCallbacks;

      if (!notificationCallbacks)
        return null;

      var domWin = notificationCallbacks.getInterface(chrome.Ci.nsIDOMWindow);
      return domWin;
    }
    catch (e) {
      dump(e + "\n");
      return null;
    }
  }
}

require("observer-service").add("http-on-modify-request", httpmods.observe, httpmods);
于 2012-10-22T17:14:05.333 に答える