5

FirefoxアドオンSDKを使用して、ブラウザでHTTPトラフィックを監視および表示するものを構築しています。HTTPFoxまたはライブHTTPヘッダーに似ています。ブラウザのどのタブ(存在する場合)がリクエストを生成したかを特定することに興味があります

オブザーバーサービスを使用して、「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);

リクエストを生成したブラウザを特定する方法については、ほとんどの場合、ドキュメントから引用されています。一部は、GooglePageSpeedFirefoxアドオンからも取得されます。

nsIDOMWindowオブジェクトからSDKタブモジュールdomWinのタブ要素に移動するための推奨または推奨される方法はありますか?

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

4

4 に答える 4

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 に答える
3

APIは、これが最初に質問/回答されてから変更されました...現在(1.15現在)は次のようになっているはずです。

return require("sdk/tabs/utils").getTabForWindow(domWin.top);
于 2014-01-01T09:04:30.727 に答える
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

誰かがまだこれを気にかけている場合:

Addon SDKは、新しいWebExtensions APIをサポートするために非推奨になっていますが、それを指摘したいと思います。

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

通常使用して取得するものとは異なる「タブ」オブジェクトを返します

PageModのworker.tab。

たとえば、a_tabには「id」属性はありませんが、「id」属性に類似したlinkedPanelプロパティがあります。

于 2017-02-17T01:01:53.330 に答える