2008-09-30 18 views
8

Estoy creando una extensión de Firefox para propósitos de demostración. I para llamar a una función de JavaScript específica en el documento de la extensión. escribí esto en mi documento HTML (extensión no en el interior, pero una página que se carga por Firefox):¿Cómo ejecuto una función de JavaScript definida por la página desde una extensión de Firefox?

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

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

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

Sin embargo, provoca un error al decir que funcToBeCalled no está definido.

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

Respuesta

8

Es por razones de seguridad que tiene acceso limitado a la página de contenido desde la extensión. Ver XPCNativeWrapper y Safely accessing content DOM from chrome,

Si el control de la página, la mejor manera de hacer esto se estableció un detector de eventos en la página y distribuir un evento desde su extensión (addEventListener en la página, dispatchEvent en la extensión).

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

+0

En realidad podríamos hacerlo sin ningún problema (o algunas cosas de "control page") http://stackoverflow.com/questions/42577963/calling-web-sites-js-function-from-firefox-addon-web-extensions Es también es más fácil para Chrome, pero ahora solo es un problema con las extensiones web para Firefox – user25

0

Puede hacerlo, pero es necesario tener control sobre la página y ser capaz de elevar el nivel de privilegio para el script. Mozilla Documentation gives an example - busque "Privilegio" en la página.

+0

Se trata de una respuesta a una pregunta diferente, y recomendar enablePrivilege no es una buena idea en general. – Nickolay

6
document.wrappedJSObject.funcToBeCalled(); 

Ésta es no es seguro y permite que una página maliciosa para elevar sus permisos a los de su extensión ... Pero, que sí hace lo que le pide. Lea en los primeros greasemonkey vulnerabilities por qué esta es una mala idea.

1

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

crear un botón ("hacerlo invisible, por lo que no molestará a su página"). al hacer clic en ese botón, llama a esta función xyz().

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

ahora en pluggin tiene un objeto de documento para la página. supongamos que su mainDoc

en la que desea llamar XYZ(), sólo hay que ejecutar esta línea

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

se llamará a la función XYZ().

buena suerte :)

Cuestiones relacionadas