2012-02-27 16 views
9

Estoy tratando de portar un complemento de Chrome a Firefox usando el addon-sdk y no puedo encontrar un método equivalente para escuchar los eventos de navegación de pestañas.Firefox addon-sdk - escuche la navegación de la página

Lo que necesito hacer es mantener los datos por página (detectado a partir del DOM), y quitar esto tan pronto como el usuario navega a una nueva página en la pestaña (pero, a mantener los datos de actualización)

me Chrome, hay que hacer algo cuando una ficha cambia de dirección URL, puedo usar:

chrome.tabs.onUpdated.addListener(function(tab_id, changeInfo, tab) { 
    if(changeInfo.status == 'loading' && changeInfo.url) { 
     //DO STUFF AS THE URL CHANGED 
    } 
}); 

En Firefox utilizando el complemento SDK he intentado usar:

tabs.on('open', function(tab){ 
    tab.on('ready', function(tab){ 
    if(tab.cachedURL != tab.url) { 
     //DO STUFF AND SET CACHE 
    } 
    }); 
}); 

el problema es que no puedo enganchar en el i evento de navegación nitial, por lo tanto, entre el inicio de la navegación del usuario y el DOM de la nueva página que está listo, los datos antiguos están disponibles.

Básicamente, necesito una forma de engancharme a la navegación inicial de una pestaña e idealmente ver a dónde va (al igual que en Chrome).

¿Alguna idea?

Respuesta

11

Por el momento no hay forma de detectar la carga de la página con pestañas. Sin embargo, puede hacerlo con el evento de inicio en modificaciones de página. También estoy interesado en hacer esto de la manera correcta, así que por favor hacer ping si encuentra una manera sin necesidad de utilizar la página-mods:

var pageMod = require("page-mod"); 
pageMod.PageMod({ 
    include: "*", // All DOM windows (ie. all pages + all iframes). 
    contentScriptWhen: "start", // page starts loading, at this point you have 
           // the head of the document and no more 
    contentScript: "", // inject no script, you can even omit this 
    onAttach: function onAttach(worker) { 
      if (worker.tab.url == worker.url) // test if at top level 
       doStuff(worker.tab.url); 
      // cleanup the attached worker 
      worker.destroy(); 
     } 
    } 
); 

Además, no sé acerca de la velocidad del disparador onAttach, como con todos los mensajes pasando en extensiones ff, podría agregar algo de tiempo (tal vez 150 ms? Vuelva a mí si tiene un punto de referencia en esto)

+0

Gracias por su respuesta, voy a tener que probar esto. Parece que hará lo que yo quiera (aunque de forma indirecta). Es de esperar que FF implemente una API más correcta en el futuro. –

+2

@AdamHeath Sí, sería genial que Mozilla y los chicos de Chromium acuerden una API común, escribiendo el estilo de proceso de especificación HTML5. – BenoitParis

+1

Probado recientemente, hace el trabajo, por lo que se marca como aceptado. Gracias –

0

Por lo que sé, esto debería capturar todos los casos de pestañas de apertura, cambio entre pestañas y navegando dentro de pestañas. La variable global url debe contener la url de la pestaña activa en todo momento, y la llamada console.log debe registrar todos los eventos que afecten a eso.

var tabs = require("sdk/tabs"); 
var url; 

var updateURL = function (tab) { 
    var oldURL = url; 
    url = tab.url; 
    console.log(oldURL+" --> "+url); 
}; 

tabs.on("activate", updateURL); 
tabs.on("pageshow", updateURL); 

updateURL(tabs.activeTab); 
+1

Creo que la línea "url = tab.url" debe estar por encima de la salida de console.log. – goelakash

Cuestiones relacionadas