Firefox 确定HTTP请求/响应是否为主框架

Firefox 确定HTTP请求/响应是否为主框架,firefox,firefox-addon,firefox-addon-sdk,Firefox,Firefox Addon,Firefox Addon Sdk,我正在使用“http on modify request”上的观察者来分析http请求(以及和相应的其他观察者的响应) 是否可以确定HTTP请求/响应是否是主帧加载(实际的页面DOM)?与其他资源(图像、css、子帧等)不同。文档中包含了您正在寻找的大部分答案,我在下面对其进行了修改,以便与插件sdk一起使用 您可以通过将位置与top.document位置进行比较来查看IFRAME 我不认为有一种简单的方法可以检测图像加载等,所以你可能只想观察第一个不是IFRAME的点击,并将其他一切视为css

我正在使用“http on modify request”上的观察者来分析http请求(以及和相应的其他观察者的响应)


是否可以确定HTTP请求/响应是否是主帧加载(实际的页面DOM)?与其他资源(图像、css、子帧等)不同。

文档中包含了您正在寻找的大部分答案,我在下面对其进行了修改,以便与插件sdk一起使用

您可以通过将位置与
top.document
位置进行比较来查看IFRAME

我不认为有一种简单的方法可以检测图像加载等,所以你可能只想观察第一个不是IFRAME的点击,并将其他一切视为css/图像/脚本内容加载

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