2010-01-07 9 views
9

¿Cómo llamar a una función de Javascript declarada en mi extensión, usando un botón html desde mi página web?cómo llamar a una función en la extensión de Firefox desde un botón html

Tengo una página html, con un botón dentro. Cuando el usuario haga clic en el botón, invocará una función que ya he declarado dentro de mi propia extensión de Firefox.

+0

Tengo este error al intentar escribir en un archivo XML dentro de la extensión: Error: Permiso denegado para para obtener XPCComponents.classes propiedad Cualquier idea de cómo resolver esto? –

+0

¿Se refiere a un elemento

Respuesta

5

Su extensión de Firefox se ejecuta en un contexto de Javascript diferente a su página HTML, por lo que la extensión no puede ser llamada directamente desde el Javascript en su página HTML.

Sin embargo, puede diseñar la extensión para permitir el acceso desde HTML. Generalmente, no se permite que HTML Javascript acceda al objeto Componente, por lo que debe permitir que el código HTML sea una forma de acceder al objeto en su extensión. Para ello, cree un componente XPCOM en su extensión y establezca el objeto en la categoría "Propiedad global JavaScript" a través del objeto nsICategoryManager. El nombre de la entrada es la cadena utilizada desde Javascript sin privilegios, el valor es la ID del contrato para su clase XPCOM.

Sin embargo, también debe permitir el acceso sin privilegios de Javascript a su objeto, o el administrador de seguridad del script bloqueará el acceso. Para permitir esto, implemente nsISecurityCheckedComponent - proporcionando canCreateWrapper (en nsIIDPtr iid), canCallMethod (en nsIIDPtr iid, en wstring methodName), canGetProperty (en nsIIDPtr iid, en wstring propertyName) y canSetProperty (en nsIIDPtr iid, en wstring propertyName) para devolver allAccess para las propiedades permitidas, y noAccess en caso contrario.

Tenga cuidado con lo que hace con la entrada del usuario, y lo que le permite el acceso - es muy fácil crear accidentalmente un agujero de seguridad en el navegador haciendo esto.

+1

tl; dr :) Esto es una exageración para el problema original, parece, ver mi respuesta. – Nickolay

7

Desde controlas la página web, el más fácil y el método más seguro para hacer lo que quiere, sería distribuir un evento DOM personalizado en la página web y escuchar en el código de extensión:

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

Aquí hay una extensión de ejemplo que escribí que hace exactamente esto http://mozilla.doslash.org/cw/ (no se actualizó a la versión más reciente de Firefox, pero está limpio y debería ser fácil de actualizar).

1

tratar de poner esto en el comienzo de su función de JavaScript que intenta acceder a un archivo local:

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

Esto le dará al usuario la opción de decidir si quieren permitir que el código para acceder a los locales sistema de archivos

Cuestiones relacionadas