2010-01-07 5 views
9

Comment appeler une fonction Javascript déclarée dans mon extension, en utilisant un bouton html de ma page web?comment appeler une fonction dans l'extension Firefox à partir d'un bouton html

J'ai une page html, avec un bouton à l'intérieur. Lorsque l'utilisateur clique sur le bouton, il appellera une fonction que j'ai déjà déclarée dans ma propre extension firefox.

+0

J'ai eu cette erreur lorsque je tente d'écrire dans un fichier xml dans l'extension: Erreur: Permission refusée à pour obtenir XPCComponents.classes de propriété Toute idée comment résoudre ce problème? –

+0

Faites-vous référence à un élément

Répondre

5

Votre extension Firefox fonctionne dans un contexte Javascript différent de votre page HTML, donc l'extension ne peut pas être appelée directement à partir du Javascript dans votre page HTML.

Toutefois, vous pouvez concevoir l'extension pour autoriser l'accès à partir du code HTML. HTML Javascript n'est généralement pas autorisé à accéder à l'objet Component, vous devez donc autoriser le code HTML à accéder à l'objet dans votre extension. Pour ce faire, créez un composant XPCOM dans votre extension et définissez l'objet dans la catégorie "Propriété globale JavaScript" via l'objet nsICategoryManager. Le nom de l'entrée est la chaîne utilisée à partir du Javascript non privilégié, la valeur est l'ID du contrat pour votre classe XPCOM. Toutefois, vous devez également autoriser l'accès Javascript non privilégié à votre objet, sinon le gestionnaire de sécurité du script bloquera l'accès. Pour permettre cela, implémentez nsISecurityCheckedComponent - fournissant canCreateWrapper (dans nsIIDPtr iid), canCallMethod (dans nsIIDPtr iid, dans wstring methodName), canGetProperty (dans nsIIDPtr iid, dans wstring propertyName) et canSetProperty (dans nsIIDPtr iid, dans wstring propertyName) pour retourner allAccess pour les propriétés autorisées, et noAccess sinon. Faites attention à ce que vous faites avec l'entrée de l'utilisateur, et à ce que vous autorisez l'accès - il est très facile de créer accidentellement un trou de sécurité dans le navigateur en faisant cela.

+1

tl; dr :) Ceci est une surcharge pour le problème original, il semble, voir ma réponse. – Nickolay

7

Depuis que vous contrôlez la page Web, la plus facile et la plus sûre méthode pour faire ce que vous voulez serait d'envoyer un événement DOM personnalisé dans la page Web et d'écouter dans le code d'extension:

https://developer.mozilla.org/En/Code_snippets/Interaction_between_privileged_and_non-privileged_pages

Voici un exemple d'extension que j'ai écrit qui fait exactement cela: http://mozilla.doslash.org/cw/ (non mis à jour pour la version la plus récente de Firefox, mais il est propre et devrait être facile à mettre à jour).

1

Essayez de mettre cela au début de votre fonction javascript qui tente d'accéder à un fichier local:

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 

Cela donnera à l'utilisateur le choix de savoir s'ils veulent permettre à votre code d'accès local système de fichiers.

Questions connexes