Wie führe ich eine Seite definierte JavaScript-Funktion von einer Firefox-Erweiterung?
-
02-07-2019 - |
Frage
Ich erstelle eine Firefox-Erweiterung für Demozwecke. Ich eine bestimmte JavaScript-Funktion in dem Dokument von der Nebenstelle anzurufen. Ich schrieb dies in meinem HTML-Dokument (nicht in Erweiterung, sondern eine Seite, die von Firefox geladen ist):
document.funcToBeCalled = function() {
// function body
};
Dann wird die Erweiterung dieses auf ein Ereignis ausgeführt werden:
var document = Application.activeWindow.activeTab.document;
document.funcToBeCalled();
Doch es stellt sich ein Fehler, dass funcToBeCalled
sagen, ist nicht definiert.
Hinweis: Ich könnte ein Element auf dem Dokument erhalten, indem document.getElementById(id);
Aufruf
Lösung
Es ist aus Gründen der Sicherheit, die Sie nur begrenzten Zugang zu der Content-Seite von Erweiterung. Siehe XPCNativeWrapper und Sicher Inhalt DOM aus Chrom Zugriff
Wenn Sie die Seite zu steuern, ist der beste Weg, dies zu tun, ist ein Ereignis-Listener in der Seite und versenden Sie ein Ereignis aus Ihrer Erweiterung (addEventListener auf der Seite, dispatch in der Verlängerung) einzurichten.
Ansonsten finden Sie unter http://groups.google.com/group /mozilla.dev.extensions/msg/bdf1de5fb305d365
Andere Tipps
document.wrappedJSObject.funcToBeCalled();
Dies ist nicht sichern und erlaubt eine bösartige Seite die Berechtigungen die Ihre Erweiterung zu erhöhen ... Aber es tut, was Sie gefragt. Informieren Sie sich über den frühen
Ich habe einen sehr einfachen Weg, es zu tun.
Angenommen, Sie haben xyz () aufrufen-Funktion, die auf Seite geschrieben wird. und Sie haben es von Ihrem pluggin nennen. Erstellen Sie eine Schaltfläche ( „unsichtbar machen., So dass es nicht Ihre Seite stören“). auf Onclick dieser Taste Aufruf dieser xyz () Funktion. jetzt in pluggin Sie haben ein Dokument-Objekt für die Seite. nehme seine mainDoc , wo Sie wollen xyz () aufzurufen, führen Sie einfach diese Zeile es wird die xyz () Funktion aufrufen. Glück:) <input type="button" id="testbutton" onclick="xyz()" />
mainDoc.getElementById('testbutton').click();
Sie können es tun, aber Sie müssen die Kontrolle über die Seite haben und in der Lage die Berechtigungsstufe für das Skript zu erhöhen. Mozilla Dokumentation ein Beispiel gibt -. Suche nach "Privilege" auf der Seite