2012-03-05 12 views
5

Sto lavorando al porting di un'estensione di Chrome a Firefox utilizzando l'SDK Add-on di Firefox.Messaggio di Script Contenuto di Pagina & Contenuto di Windows che passa in un'estensione di Firefox

L'estensione è costituita da un pannello collegato a un toolbar button (equivalente all'opzione popup.html + browser di Chrome) e uno script di contenuto PageMod.

Quando si apre il pannello, è necessario inviare un messaggio allo script di contenuto della scheda corrente per ricevere un oggetto contenente alcune informazioni da tale pagina. La parte che ho problemi è come far passare il messaggio. Qualcuno può aiutarmi a indicarmi la giusta direzione? Non riesco a trovare molte risorse per aiutare gli sviluppatori di estensioni di Chrome a imparare lo sviluppo di addon di Firefox.

La seguente domanda dimostra questo concetto nell'ambiente Chrome. Ho solo bisogno di aiuto per portarlo su Firefox.
Chrome Extension - Message Passing from Popup to Content Script

risposta

9

E 'un po' più complicato con l'Add-on SDK perché non si comunica con le schede lì - si comunica con i lavoratori che si è creato. E il sistema non terrà traccia dei lavoratori, devi farlo tu stesso. Qualcosa del genere dovrebbe funzionare (codice non testato):

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

Questo fa in modo che la variabile workers contiene l'elenco dei lavoratori attivi (Worker object documentation). Così, quando è necessario inviare un messaggio al lavoratore assegnato a una scheda particolare che si esegue questa operazione:

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

Naturalmente è possibile farlo solo dall'estensione sé, non dallo script contenuto caricato in un pannello o qualcosa come quello. Se ci si trova in uno script di contenuto, è necessario prima inviare un messaggio all'estensione e inoltrare il messaggio al lavoratore nella scheda.

+0

Come da questa segnalazione di bug https://bugzilla.mozilla.org/show_bug.cgi confrontando la scheda di un lavoratore con la scheda attiva non è sufficiente trovare l'operaio corretto in quanto una scheda può ancora contenere diversi vecchi lavoratori nella sua cronologia. – baseten

+0

La soluzione sembra essere qui: http://stackoverflow.com/questions/15502043/addon-sdk-context-menu-and-page-mod-workers – baseten

Problemi correlati