¿Cómo ejecuto una función JavaScript definida por la página desde una extensión de Firefox?

StackOverflow https://stackoverflow.com/questions/151555

Pregunta

Estoy creando una extensión de Firefox para fines de demostración. Para llamar a una función JavaScript específica en el documento desde la extensión. Escribí esto en mi documento HTML (no dentro de la extensión, sino en una página cargada por Firefox):

document.funcToBeCalled = function() {
   // function body
};

Entonces, la extensión ejecutará esto en algún evento:

var document = Application.activeWindow.activeTab.document;
document.funcToBeCalled();

Sin embargo, genera un error que dice que funcToBeCalled no está definido.

Nota: Podría obtener un elemento en el documento llamando a document.getElementById(id);

¿Fue útil?

Solución

Es por razones de seguridad que tiene acceso limitado a la página de contenido desde la extensión. Consulte XPCNativeWrapper y Acceso seguro al contenido DOM desde Chrome ,

Si controla la página, la mejor manera de hacerlo es configurar un detector de eventos en la página y enviar un evento desde su extensión (addEventListener en la página, dispatchEvent en la extensión).

De lo contrario, consulte http://groups.google.com/group /mozilla.dev.extensions/msg/bdf1de5fb305d365

Otros consejos

document.wrappedJSObject.funcToBeCalled();

Esto es no seguro y permite que una página maliciosa eleve sus permisos a los de su extensión ... Pero, hace lo que le pidió. Lea sobre la primera vulnerabilidades de greasemonkey por qué es una mala idea.

Tengo una forma muy simple de hacerlo. Suponga que tiene que llamar a la función xyz () que está escrita en la página. y tienes que llamarlo desde tu complemento.

crea un botón (" hazlo invisible. para que no moleste tu página "). Al hacer clic en ese botón, llame a esta función xyz ().

<input type="button" id="testbutton" onclick="xyz()" />

ahora en el complemento tiene un objeto de documento para la página. supongamos que es mainDoc

donde desea llamar a xyz (), simplemente ejecute esta línea

mainDoc.getElementById('testbutton').click();

llamará a la función xyz ().

buena suerte :)

Puede hacerlo, pero necesita tener control sobre la página y poder elevar el nivel de privilegio para el script. Mozilla Documentation da un ejemplo - busque " Privilege " en la página.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top