2012-03-05 11 views
5

Estoy trabajando para portar una extensión de Chrome a Firefox con el SDK Add-on de Firefox.Panel y contenido de PageMod Mensaje de script que pasa en una extensión de Firefox

La extensión consta de un panel conectado a un toolbar button (equivalente a la acción popup.html + navegador de Chrome) y un script de contenido de PageMod.

Cuando se abre el panel, debe enviar un mensaje al script de contenido de la pestaña actual para recibir un objeto que contenga información de esa página. La parte con la que estoy teniendo problemas es cómo transmitir el mensaje. ¿Alguien puede ayudarme a orientarme en la dirección correcta? Parece que no puedo encontrar muchos recursos para ayudar a los desarrolladores de extensiones de Chrome a aprender el desarrollo de complementos de Firefox.

La siguiente pregunta demuestra este concepto en el entorno de Chrome. Solo necesito ayuda para portarlo a Firefox.
Chrome Extension - Message Passing from Popup to Content Script

Respuesta

9

Es un poco más complicado con el add-on SDK, ya que no se comunica con pestañas allí - a comunicarse con los trabajadores que se han creado. Y el sistema no hará un seguimiento de los trabajadores, usted debe hacerlo usted mismo. Algo como esto debería funcionar (código no probado):

var workers = []; 
var pageMod = require("page-mod"); 
pageMod.PageMod({ 
    include: ..., 
    contentScriptFile: ..., 
    onAttach: function(worker) 
    { 
    workers.push(worker); 
    worker.on("detach", function() 
    { 
     var index = workers.indexOf(worker); 
     if (index >= 0) 
     workers.splice(index, 1); 
    }); 
    } 
}); 

Esto asegura que la variable workers contiene la lista de los trabajadores activos (Worker object documentation). Así que cuando usted necesita enviar un mensaje al trabajador asignado a una pestaña en particular que hace esto:

var tabs = require('tabs'); 
for (var i = 0; i < workers.length; i++) 
    if (workers[i].tab == tabs.activeTab) 
    worker.postMessage(...); 

Por supuesto que puede hacerlo sólo desde la extensión de sí mismo, no desde el script de carga de contenido en un panel o algo como eso. Si está en un script de contenido, primero debe enviar un mensaje a la extensión y luego debe reenviar el mensaje al trabajador en la pestaña.

+0

Según este informe de error https://bugzilla.mozilla.org/show_bug.cgi, comparar la pestaña de un trabajador con la pestaña activa no es suficiente para encontrar al trabajador correcto, ya que una pestaña todavía puede contener varios trabajadores antiguos en su historial. – baseten

+0

La solución parece estar aquí: http://stackoverflow.com/questions/15502043/addon-sdk-context-menu-and-page-mod-workers – baseten

Cuestiones relacionadas