2008-09-30 6 views
8

Je crée une extension Firefox à des fins de démonstration. Je dois appeler une fonction JavaScript spécifique dans le document à partir de l'extension. je l'ai écrit dans mon document HTML (extension non à l'intérieur, mais une page qui est chargée par Firefox):Comment exécuter une fonction JavaScript définie par une page à partir d'une extension Firefox?

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

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

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

Cependant, il déclenche une erreur indiquant que funcToBeCalled n'est pas défini.

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

Répondre

8

Pour des raisons de sécurité, vous avez un accès limité à la page de contenu depuis l'extension. Voir XPCNativeWrapper et Safely accessing content DOM from chrome,

Si vous contrôlez la page, la meilleure façon de le faire est mis en place un écouteur d'événement dans la page et Transmet un événement de votre extension (addEventListener dans la page, dispatchEvent dans l'extension).

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

+0

Nous pourrions effectivement le faire sans aucun problème (ou des trucs de "page de contrôle") http://stackoverflow.com/questions/42577963/calling-web-sites-js-function-from-firefox-addon-web-extensions c'est également plus facile pour Chrome, mais maintenant seul problème avec les extensions Web pour Firefox – user25

0

Vous pouvez le faire, mais vous devez avoir le contrôle sur la page et être en mesure de relever le niveau de privilège pour le script. Mozilla Documentation gives an example - recherchez "Privilege" sur la page.

+0

Ceci est une réponse à une autre question, et en recommandant enablePrivilege n'est pas une bonne idée en général. – Nickolay

6
document.wrappedJSObject.funcToBeCalled(); 

Ceci est pas sécurisé et permet à une page malicieuse pour élever ses autorisations à ceux de votre extension ... Mais, il ne fait ce que vous avez demandé. Lisez sur le début greasemonkey vulnerabilities pour savoir pourquoi c'est une mauvaise idée.

1

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

créer un bouton ("le rendre invisible pour ne pas déranger votre page"). sur onclick de ce bouton, appelez 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(), il suffit d'exécuter cette ligne

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

il appellera la fonction xyz().

bonne chance :)

Questions connexes