2012-03-05 14 views
5

Pracuję nad przeniesieniem rozszerzenia przeglądarki Chrome do przeglądarki Firefox przy użyciu dodatku SDK do przeglądarki Firefox.Panel i zawartość strony PageMod Komunikat skryptu przekazywany w rozszerzeniu przeglądarki Firefox

Rozszerzenie składa się z panelu podłączonego do toolbar button (odpowiednik przeglądarki Chrome popup.html + działanie przeglądarki) i skryptu strony PageMod.

Po otwarciu panelu należy wysłać wiadomość do skryptu zawartości bieżącej karty, aby odebrać obiekt zawierający pewne informacje z tej strony. Część, z którą mam problem, to jak właściwie przekazać wiadomość. Czy ktoś może wskazać mi właściwy kierunek? Nie mogę znaleźć wielu zasobów, które pomogłyby programistom rozszerzeń Chrome nauczyć się rozwoju dodatku do Firefoksa.

Poniższe pytanie pokazuje tę koncepcję w środowisku Chrome. Potrzebuję pomocy przy przenoszeniu jej do Firefoksa.
Chrome Extension - Message Passing from Popup to Content Script

Odpowiedz

9

To nieco bardziej skomplikowane z Add-on SDK, ponieważ nie komunikują się z kartami tam - komunikować się z pracownikami, które stworzył. A system nie będzie śledził pracowników, musisz to zrobić sam. Coś jak to powinno działać (kod niesprawdzone):

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

Daje to pewność, że zmienna workers zawiera listę aktywnych pracowników (Worker object documentation). Tak więc, gdy trzeba wysłać wiadomość do pracownika przypisanego do danej karty to zrobić:

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

Oczywiście można to zrobić tylko z samego rozszerzenia, a nie ze skryptu zawartości załadowany do panelu lub czegoś tak. Jeśli jesteś w skrypcie treści, musisz najpierw wysłać wiadomość do rozszerzenia, a następnie przesłać wiadomość do pracownika na karcie.

+0

Zgodnie z tym raportem o błędzie https://bugzilla.mozilla.org/show_bug.cgi porównanie karty pracownika z aktywną kartą nie jest wystarczające do znalezienia właściwego pracownika, ponieważ karta może nadal zawierać kilku starych pracowników w swojej historii. – baseten

+0

Rozwiązanie wydaje się być tutaj: http://stackoverflow.com/questions/15502043/addon-sdk-context-menu-and-page-mod-workers – baseten