Определить вкладку, которая сделала запрос в Firefox Addon SDK - PullRequest
5 голосов
/ 11 ноября 2011

Я использую Firefox Addon SDK для создания чего-то, что отслеживает и отображает HTTP-трафик в браузере. Аналогично HTTPFox или Live HTTP Headers . Меня интересует, какая вкладка в браузере (если есть) генерирует запрос

Использование службы наблюдателей Я наблюдаю за событиями "http-on-exam-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 объект domWin к элементу вкладки в модуле вкладки SDK модуль?

Я посчитал что-то хакерским, например, просмотр списка вкладок для одного с URL-адресом, совпадающим с URL-адресом для domWin, но мне нужно беспокоиться о том, что несколько вкладок имеют один и тот же URL.

Ответы [ 4 ]

3 голосов
/ 01 января 2014

API изменился с тех пор, как об этом изначально спросили / ответили Теперь должно быть (по состоянию на 1.15):

return require("sdk/tabs/utils").getTabForWindow(domWin.top);
3 голосов
/ 12 ноября 2011

Вы должны продолжать использовать внутренние пакеты.Из того, что я могу сказать, функция getTabForWindow() в пакете api-utils/lib/tabs/tab.js делает именно то, что вы хотите.Непроверенный код:

var tabsLib = require("sdk/tabs/tab.js");
return tabsLib.getTabForWindow(domWin.top);
0 голосов
/ 17 февраля 2017

Если кого-то все еще волнует это:

Несмотря на то, что Addon SDK устарел в поддержку более нового API WebExtensions, я хочу отметить, что

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

возвращает объект 'tab', отличный от того, который вы обычно получаете, используя

worker.tab в PageMod.

Например, a_tab не будет иметь атрибута 'id', но будет иметь свойство connectedPanel, аналогичное атрибуту 'id'.

0 голосов
/ 30 января 2013

Начиная с версии 1.13 Addon SDK, измените:

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

на

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

...