5

我正在使用Firefox Addon SDK来构建监视和显示浏览器中的 HTTP 流量的东西。类似于HTTPFoxLive HTTP Headers。我有兴趣确定浏览器中的哪个选项卡(如果有)生成了请求

使用观察者服务,我正在监视“http-on-examine-response”事件。我有如下代码来识别生成请求的 nsIDomWindow:


const observer = require("observer-service"),
    {Ci} = require("chrome");

function getTabFromChannel(channel) {
    try {
        var noteCB= channel.notificationCallbacks ? channel.notificationCallbacks : channel.loadGroup.notificationCallbacks;

        if (!noteCB) { return null; }

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

function logHTTPTraffic(sub, data) {
    sub.QueryInterface(Ci.nsIHttpChannel);
    var ab = getTabFromChannel(sub);
    console.log(tab);
}

observer.add("http-on-examine-response", logHTTPTraffic);

大部分是从文档中抄来的,以了解如何识别生成请求的浏览器。有些还取自Google PageSpeed Firefox 插件。

是否有推荐或首选的方法从nsIDOMWindow对象转到SDK 选项卡模块domWin中的选项卡元素?

我考虑过一些 hacky,比如扫描选项卡列表以查找一个 URL 与 domWin 的 URL 匹配的 URL,但是我不得不担心多个选项卡具有相同的 URL。

4

4 回答 4

3

自从最初询问/回答以来,API 发生了变化......现在(从 1.15 开始)应该是:

return require("sdk/tabs/utils").getTabForWindow(domWin.top);
于 2014-01-01T09:04:30.727 回答
3

您必须继续使用内部包。据我所知,包中的getTabForWindow()函数api-utils/lib/tabs/tab.js完全符合您的要求。未经测试的代码:

var tabsLib = require("sdk/tabs/tab.js");
return tabsLib.getTabForWindow(domWin.top);
于 2011-11-12T07:31:41.763 回答
0

从 Addon SDK 1.13 版开始更改:

var tabsLib = require("tabs/tab.js");

var tabsLib = require("sdk/tabs/helpers.js");

于 2013-01-30T13:05:13.727 回答
0

如果有人仍然关心这个:

尽管为了支持较新的 WebExtensions API 而弃用了 Addon SDK,但我想指出

var a_tab = require("sdk/tabs/utils").getTabForContentWindow(window)

返回与您通常使用的“选项卡”对象不同的“选项卡”对象

PageMod 中的 worker.tab。

例如,a_tab 将没有 'id' 属性,但会有类似于 'id' 属性的linkedPanel 属性。

于 2017-02-17T01:01:53.330 回答