2011-11-11 36 views
5

我使用Firefox Addon SDK来构建监视器并在浏览器中显示HTTP通信量。类似于HTTPFoxLive HTTP Headers。我有兴趣确定浏览器中的哪个选项卡(如果有)生成请求识别在Firefox Addon SDK中发出请求的选项卡

使用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晴那儿剽窃。有些也取自Firefox的插件Google PageSpeed

是否有从nsIDOMWindow对象domWinSDK tabs模块中的选项卡元素的推荐或首选方法?

我已经考虑过像扫描选项卡列表中的一个与domWin的URL匹配的URL,但后来我不得不担心具有相同URL的多个选项卡。

回答

3

你必须继续使用内部软件包。从我所知道的,getTabForWindow()函数在api-utils/lib/tabs/tab.js包中的功能正是你想要的。未经测试的代码:

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

太棒了,很好用!猜猜我需要留意源代码和文档。 – Rob

0

由于附加组件SDK版本1.13的变化:

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

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

3

的API已经改变,因为这本来就是问/回答.. 它现在应该(从1.15开始)是:

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

现在它调用getTabForContentWindow – Suhan

0

如果现在还有人关心这一点:

虽然附加组件SDK是在支持新WebExtensions API遭到淘汰,我想指出的是,

VAR a_tab =要求(“SDK /标签/utils").getTabForContentWindow(window)

返回一个比你通常会通过在PageMod使用

worker.tab得到一个不同的“标签”的对象。

例如,a_tab不具有'id'属性,但会具有与'id'属性类似的linkedPanel属性。