2010-01-07 6 views
9

Wie ruft man eine JavaScript-Funktion in meiner Erweiterung deklariert, mit einem HTML-Button von meiner Webseite?So rufen Sie eine Funktion in Firefox-Erweiterung von einem HTML-Button

Ich habe eine HTML-Seite, mit einem Knopf im Inneren. Wenn der Benutzer auf die Schaltfläche klickt, ruft er eine Funktion auf, die ich bereits in meiner eigenen Firefox-Erweiterung deklariert habe.

+0

Ich habe diesen Fehler, wenn ich versuche, in der Erweiterung zu einer XML-Datei zu schreiben: Fehler: Zugriff für verweigerte Eigenschaft XPCComponents.classes Jede Idee zu bekommen, wie dieses Problem zu lösen? –

+0

Beziehen Sie sich auf ein

Antwort

5

Ihre Firefox-Erweiterung läuft in einem anderen Javascript-Kontext als Ihre HTML-Seite, daher kann die Erweiterung nicht direkt aus dem Javascript in Ihrer HTML-Seite aufgerufen werden.

Sie können jedoch die Erweiterung entwerfen, um den Zugriff von HTML zu ermöglichen. HTML JavaScript ist im Allgemeinen nicht erlaubt, um auf das Component-Objekt zuzugreifen. Daher müssen Sie dem HTML-Code erlauben, auf das Objekt in Ihrer Erweiterung zuzugreifen. Erstellen Sie dazu eine XPCOM-Komponente in Ihrer Erweiterung, und legen Sie das Objekt in der Kategorie "JavaScript global property" über das nsICategoryManager-Objekt fest. Der Eintragsname ist die Zeichenfolge, die von nicht privilegiertem JavaScript verwendet wird. Der Wert ist die Vertrags-ID für Ihre XPCOM-Klasse.

Sie müssen jedoch auch nicht privilegierten JavaScript-Zugriff auf Ihr Objekt zulassen, da andernfalls der Skript-Sicherheitsmanager den Zugriff blockiert. Um dies zu ermöglichen, implementieren Sie nsISecurityCheckedComponent - canCreateWrapper (in nsIIDPtr iid), canCallMethod (in nsIIDPtr iid, in wstring methodName), canGetProperty (in nsIIDPtr iid, in wstring propertyName) und canSetProperty (in nsIIDPtr iid, in wstring propertyName), um allAccess zurückzugeben für die erlaubten Eigenschaften und ansonsten noAccess.

Seien Sie vorsichtig, was Sie mit Benutzereingaben tun und wozu Sie den Zugriff erlauben - es ist sehr einfach, versehentlich eine Sicherheitslücke im Browser zu erzeugen.

+1

tl; dr :) Dies ist ein Overkill für das ursprüngliche Problem scheint es, siehe meine Antwort. – Nickolay

7

Da Sie die Web-Seite zu steuern, ist die einfachste und sicherste Methode zu tun, was würden Sie wollen ein benutzerdefinierten DOM-Ereignis in der Web-Seite zu versenden und zu ihm in dem Erweiterungscode hören:

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

Hier ist ein Beispiel Erweiterung, die ich geschrieben habe, die genau das tut http://mozilla.doslash.org/cw/ (nicht auf die neueste Firefox-Version aktualisiert, aber es ist sauber und sollte leicht zu aktualisieren sein).

1

Versuchen Sie, diese zu Beginn Ihrer JavaScript-Funktion zu setzen, die eine lokale Datei zuzugreifen versucht:

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

Dies wird dem Benutzer die Wahl geben, ob sie wollen Ihren Code ermöglichen, den lokalen Zugriff auf Dateisystem.

Verwandte Themen