2011-11-22 11 views
5

Tengo un archivo que sobrescribe overlay.xul que sobrescribe browser.xul. Quiero implementar la transferencia de mensajes de forma similar a la implementada en las extensiones de Chrome.¿Cómo implementar mensajes que pasan en la extensión de 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 

Cómo me registro content_script.js que en mi caso es 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" /> 

Ahora dentro de mi overlay.js estoy usando -

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

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

}, true); 

Y el background.js es-

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

    Firebug.Console.log(obj.name); 
}, true); 
  • ¿Cuál es la sintaxis correcta para el mensaje que pasa?
  • ¿Cómo configuro la conexión entre el script de contenido y el script del navegador?

Respuesta

0

Si todo lo que está interesado en que realmente está inyectando un script contenido y comunicarse con él, entonces debería ser más fácil usar el Add-on SDK, en particular la page-mod package. Permite insertar scripts de contenido fácilmente y proporciona una forma de comunicarse (consulte la sección "Comunicación con los scripts de contenido" en los documentos que mencioné).

En cuanto a messageManager, está diseñado para un entorno multiproceso, pero también funcionará en el Firefox de proceso único actual. El problema principal con su código anterior es: addMessageListener no es una función global, debe llamar al messageManager.addMessageListener(). Pero usar messageManager para pasar mensajes entre scripts que se cargan en el mismo espacio de nombres y podrían llamarse entre sí directamente es una exageración de todos modos.

Para comunicarse con un script contenido en la pestaña actual la secuencia de comandos en la superposición haría:

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

Y el guión de contenido fuera verdaderamente addMessageListener como una función global, por lo que esto debería funcionar:

addMessageListener("MyMessenger.MyMessage", function(obj) { 
    console.log(obj.name); 
}); 
Cuestiones relacionadas