Comment exécuter une fonction JavaScript définie par une page à partir d'une extension Firefox?

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

Question

Je crée une extension Firefox à des fins de démonstration. J'appelle une fonction JavaScript spécifique dans le document à partir de l'extension. J'ai écrit ceci dans mon document HTML (pas à l'intérieur, mais une page chargée par Firefox):

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

Ensuite, l'extension exécutera ceci sur un événement:

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

Cependant, une erreur est générée en indiquant que funcToBeCalled n'est pas défini.

Remarque: je pourrais obtenir un élément sur le document en appelant document.getElementById (id);

Était-ce utile?

La solution

C’est pour des raisons de sécurité que vous avez un accès limité à la page de contenu à partir d’une extension. Voir XPCNativeWrapper et Accès sécurisé au contenu DOM à partir de chrome ,

Si vous contrôlez la page, le meilleur moyen de le faire est de configurer un écouteur d'événement dans la page et d'envoyer un événement à partir de votre extension (addEventListener dans la page, dispatchEvent dans l'extension).

Sinon, voir http://groups.google.com/group /mozilla.dev.extensions/msg/bdf1de5fb305d365

Autres conseils

document.wrappedJSObject.funcToBeCalled();

Il s'agit de non sécurisé et permet à une page malveillante d'élever ses autorisations au niveau de celles de votre extension ... Mais elle fait ce que vous lui avez demandé. Rendez-vous au début de Les vulnérabilités de greasemonkey expliquent pourquoi c’est une mauvaise idée.

J'ai un moyen très simple de le faire. Supposons que vous deviez appeler la fonction xyz () qui est écrite à la page. et vous devez l'appeler depuis votre pluggin.

créez un bouton ("le rendre invisible. afin de ne pas perturber votre page"). Cliquez sur ce bouton pour appeler cette fonction xyz ().

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

maintenant dans Pluggin vous avez un objet document pour la page. supposons que son mainDoc

où vous voulez appeler xyz (), exécutez simplement cette ligne

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

il appellera la fonction xyz ().

bonne chance:)

Vous pouvez le faire, mais vous devez avoir le contrôle de la page et pouvoir augmenter le niveau de privilège du script. La documentation de Mozilla donne un exemple - recherche de " Privilege " sur la page.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top