2011-11-22 10 views
5

Mam plik, który nadpisuje overlay.xul, który nadpisuje browser.xul. Chcę zaimplementować przekazywanie wiadomości w podobny sposób, jak zaimplementowano w rozszerzeniach chrome.Jak zaimplementować przekazywanie wiadomości w rozszerzeniu przeglądarki Firefox?

chrome.manifest-

content helloworld content/ 
overlay chrome://browser/content/browser.xul chrome://helloworld/content/overlay.xul 
overlay chrome://navigator/content/navigator.xul chrome://helloworld/content/overlay.xul 


skin helloworld classic/1.0 skin/ 
style chrome://global/content/customizeToolbar.xul chrome://helloworld/content/overlay.css 

Jak zarejestrować content_script.js co w moim przypadku jest overlay.js?

Overlay.xul -

<script type="application/x-javascript" src="chrome://helloworld/content/jquery.js" /> 
<script type="application/x-javascript" src="chrome://helloworld/content/overlay.js" /> 
<script type="application/x-javascript" src="chrome://helloworld/content/background.js" /> 

Teraz w moim overlay.js używam -

document.documentElement.addEventListener('click', function(e) { 

    messageManager.sendAsyncMessage('MyMessenger.MyMessage', {}); 

}, true); 

A z background.js IS-

addMessageListener("MyMessenger.MyMessage", function(obj) { 

    Firebug.Console.log(obj.name); 
}, true); 
  • jaka jest poprawna składnia do przekazywania wiadomości?
  • Jak skonfigurować połączenie między skryptem treści a skryptem przeglądarki?

Odpowiedz

0

Jeśli wszystko jesteś zainteresowany jest naprawdę wstrzykiwanie skrypt treści i komunikuje się z nim potem powinno być łatwiej użyć Add-on SDK, szczególnie page-mod package. Pozwala to na łatwe wstrzykiwanie skryptów treści i zapewnia sposób komunikowania się (patrz sekcja "Komunikacja ze skryptami treści" w dokumentach, o których wspomniałem).

Jeśli chodzi o messageManager, to jest przeznaczone dla środowiska wieloprocesowego, ale będzie działać również w obecnej jednoprocesorowej przeglądarce Firefox. Głównym problemem z powyższym kodem jest: addMessageListener nie jest funkcją globalną, powinieneś zadzwonić pod numer messageManager.addMessageListener(). Ale używanie messageManager do przekazywania komunikatów między skryptami, które są ładowane do tej samej przestrzeni nazw i mogą nawiązywać połączenia bezpośrednio, jest tak czy inaczej przesadą.

Aby komunikować się ze scenariuszem zawartości w bieżącej zakładce skrypt w nakładce byłoby zrobić:

gBrowser.selectedBrowser.messageManager.sendAsyncMessage('MyMessenger.MyMessage', {}); 

i skrypt zawartości rzeczywiście mają addMessageListener jako funkcję globalnego tak to powinno działać:

addMessageListener("MyMessenger.MyMessage", function(obj) { 
    console.log(obj.name); 
}); 
Powiązane problemy