2011-11-11 11 views
5

Estoy usando Firefox Addon SDK para crear algo que supervise y muestre el tráfico HTTP en el navegador. Similar a HTTPFox o Live HTTP Headers. Estoy interesado en identificar qué pestaña del navegador (si existe) generé la solicitudPestaña Identificar que realizó una solicitud en Firefox Addon SDK

Uso del observer-service Estoy supervisando los eventos "http-on-examine-response". Tengo un código como el siguiente para identificar el nsIDomWindow que generó la petición:


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

Parcialmente cribbed del documentation for how to identify the browser that generated the request. Algunos también se toman del complemento Google PageSpeed de Firefox.

¿Existe una manera recomendada o preferida para pasar del objeto nsIDOMWindowdomWin a un elemento de tabulación en el módulo SDK tabs?

He considerado algo raro como escanear la lista de pestañas para una con una URL que coincida con la URL de domWin, pero luego tengo que preocuparme por las múltiples pestañas que tienen la misma URL.

Respuesta

3

Tienes que seguir usando los paquetes internos. Por lo que puedo decir, la función getTabForWindow() en el paquete api-utils/lib/tabs/tab.js hace exactamente lo que usted desea. código no probado:

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

Impresionante que funciona genial! Supongo que necesito vigilar la fuente y la documentación. – Rob

0

partir de la versión 1.13 Complemento SDK cambio:

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

a

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

3

La API ha cambiado desde que este fue publicada originalmente/respondió .. Ahora debería (a partir de 1.15) ser:

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

Ahora llama getTabForContentWindow – Suhan

0

Si alguien todavía se preocupa por esto:

Aunque el SDK Addon está en desuso en apoyo de la nueva API WebExtensions, quiero señalar que

var a_tab = solicite ("SDK/pestañas /utils").getTabForContentWindow(window)

devuelve un objeto diferente 'ficha' a la que lo más habitual es recibir al usar

worker.tab en un PageMod.

Por ejemplo, a_tab no tendrá el atributo 'id', pero habría vinculado la propiedad Panel que es similar al atributo 'id'.

Cuestiones relacionadas