识别在Firefox Addon SDK中发出请求的选项卡

时间:2011-11-11 18:52:56

标签: javascript firefox-addon firefox-addon-sdk

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

使用我正在监控的observer-service" 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);

主要来自documentation for how to identify the browser that generated the request。有些也取自Google PageSpeed Firefox插件。

是否有推荐或首选的方式从nsIDOMWindow对象domWin转到SDK tabs模块中的标签元素?

我已经考虑过像浏览标签列表那样的网页,其中的网址与domWin的网址相匹配,但后来我不得不担心多个标签具有相同的网址。

4 个答案:

答案 0 :(得分:3)

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

var tabsLib = require("sdk/tabs/tab.js");
return tabsLib.getTabForWindow(domWin.top);

答案 1 :(得分:3)

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

return require("sdk/tabs/utils").getTabForWindow(domWin.top);

答案 2 :(得分:0)

从Addon SDK版本1.13开始更改:

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

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

答案 3 :(得分:0)

如果有人仍然关心这个:

虽然不推荐使用Addon SDK来支持更新的WebExtensions API,但我想指出

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

返回一个不同的标签'对象比通常使用

获得的对象 PageM中的

worker.tab。

例如,a_tab不会有' id'属性,但会有linkPanel属性,类似于' id'属性。