2011-11-11 11 views
5

Firefox Addon SDKを使用して、HTTPトラフィックを監視してブラウザに表示するものを作成しています。 HTTPFoxまたはLive HTTP Headersに似ています。ブラウザのどのタブ(あれば)がリクエストを生成したかを確認することに興味がありますFirefox Addon SDKでリクエストされたタブを特定します

observer-serviceを使用しています。「http-on-examine-response」イベントを監視しています。ほとんどdocumentation for how to identify the browser that generated the requestからcribbed


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

:私は要求を生成しnsIDomWindowを識別するために、次のようなコードを持っています。いくつかはFirefoxアドオンGoogle PageSpeedからも取得されています。

モジュールのnsIDOMWindowオブジェクトdomWinのタブ要素に移動することをお勧めしますか?

私は、domWinのURLと一致するURLを持つタブリストをスキャンするような何かのハッキリを考えましたが、同じURLを持つ複数のタブについて心配する必要があります。

答えて

3

内部パッケージを使用し続ける必要があります。私が言うことができるから、api-utils/lib/tabs/tab.jsパッケージのgetTabForWindow()機能が欲しいものを正確にします。未テストコード:アドオンSDKのバージョン1.13の変更のよう

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

素晴らしい作品です!ソースとドキュメンテーションに注目する必要があると思います。 – Rob

0

:これはもともと答え/頼まれたので、

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

3

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

への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プロパティがあります。

関連する問題