0

我正在尝试开发一个 firefox 扩展来记录每个浏览器选项卡/窗口的所有资源加载 url。我搜索了几个小时,但找不到将每个拦截的 http 请求与其原始选项卡相关联的方法。这是我到目前为止所拥有的。

Components.classes["@mozilla.org/observer-service;1"]
  .getService(Components.interfaces.nsIObserverService)
  .addObserver({
    observe: function(aSubject, aTopic, aData) {
       if ("http-on-modify-request" == aTopic) {
         var url = aSubject
              .QueryInterface(Components.interfaces.nsIHttpChannel)
              .originalURI.spec;
         alert(url);
       }
    }
}, "http-on-modify-request", false);

我可以获取 http 请求的 url,但我不知道有没有办法将它链接到浏览器窗口/选项卡。

我通读了 MDN 的文档,但没有提及。(https://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loads)

有什么建议么?

4

2 回答 2

3

如果您希望构建您的扩展程序,不仅适用于 Firefox,还适用于 Chrome、IE 和 Safari,只需 1 个(javascript)代码,我建议您使用Crossrider

你可以很容易地实现你正在寻找的东西。您可以使用他们的 onRequest API 监听所有发出的请求:

appAPI.onRequest(function(resourceUrl, tabUrl) {
  // Where:
  //   * resourceUrl contains the URL of the requested resource
  //   * tabUrl contains the URL of the tab requesting the resource

  // Block the loading of js scripts
  if (resourceUrl.match(/.*/) {
    // Do what ever you need with the specific resource
    // For example - save it in the extension database using appAPI.db.set()
  }
});

进入扩展程序的 background.js 并允许您对每个页面/选项卡的每个加载资源执行任何您想要的操作。

于 2012-07-30T19:07:19.067 回答
1

我对Is it possible to know the target DOMWindow for an HTTPRequest 的回答几乎可以让你到达那里。您将获得与请求关联的窗口,但它可能是选项卡中的一个框架。一旦你拥有它,你就可以获得window.top- 这将是浏览器选项卡中的顶部窗口。如果您需要实际的浏览器选项卡元素,可以使用我在查找与 DOM 窗口关联的选项卡中的答案。

于 2012-07-30T09:32:11.063 回答