2010-11-18 3 views
3

Ich entwickle eine Firefox-Erweiterung, die eine Schaltfläche in der Statusleiste platziert. Wenn auf die Schaltfläche geklickt wird, fügt die Erweiterung etwas Javascript in die aktuelle Seite ein. Dieses Javascript hat eine Funktion, die ich mit einigen Parametern aufrufen möchte. Ich habe es geschafft, den Code zu injizieren, ich habe die Seite über Firebug inspiziert und überprüft, dass der JS injiziert wurde. Wie kann ich eine Javascript-Funktion auf der Seite von meiner Erweiterung aufrufen?Ausführen von Javascript-Code in eine Seite beim Entwickeln einer Firefox-Erweiterung

--Mehr Informationen

Hier ist der Code, den ich meinen Javascript bin mit injizieren:

var doc = window.content.document; 

//Add the script 
var visibilityJS = doc.createElement("script"); 
visibilityJS.setAttribute("type", "text/javascript"); 
visibilityJS.setAttribute("charset", "UTF-8"); 
visibilityJS.setAttribute("src", "chrome://visibility/content/scripts/visibility.js"); 
head.appendChild(visibilityJS); 

//Call the function 
alert("Executing testfunction"); 
window.content.document.defaultView.testFunction(); 

..und der Code in meiner JS-Datei, die ich injizieren werde. d.h. Sichtbarkeit.js

window.testFunction = function() { 
    alert("Message"); 
} 

Danke.

Antwort

4

Dies funktionierte. Ich kenne die technischen Details nicht. Ich habe einen Teil der Lösung von Felix und einen Teil davon von here bekommen.

window.content.document.defaultView.wrappedJSObject.testFunction(); 
2

Wenn Sie eine globale Variable in Ihrem injizierte Code (oder explizit eine Eigenschaft des window Objekts) erklären, dann ein Weg macht einen Verweis auf dieses Element aus Ihrer Erweiterung ist über das gBrowser Objekt:

gBrowser.contentDocument.defaultView.yourObject 
      ^-- HTML document^
       object   |-- window object 

Seien Sie vorsichtig, wenn Sie window und document in Ihrem Code verwenden. Abhängig vom Kontext kann es sich auf das Firefox-Fenster oder das Website-Fenster-Objekt beziehen.

+0

Hallo Felix. Ich konnte nicht recht herausfinden, was du meintest. Ich habe versucht, die Dokumentation zu lesen, d. H. Die Seite, auf die Sie hingewiesen haben, aber ich konnte sie immer noch nicht ganz verstehen. Ich habe 'window.content.document. ' versucht, aber das hat nicht funktioniert. Würdest du zufällig ein einfaches Beispiel oder etwas haben? Vielen Dank. –

+0

@Mridang Agarwalla: Sie sind in der Nähe. 'window.content.document' sollte Ihnen dasselbe wie' gBrowser.contentDocument' geben. Aber das gibt Ihnen das "Dokument" -Objekt der Website. Globale Variablen sind immer Eigenschaften des 'Fenster'-Objekts der Website. 'document.defaultView' sollte Ihnen dieses Objekt geben. Versuchen Sie 'window.content.document.defaultView. '. –

+0

Hallo nochmal Felix. Ich kann immer noch nicht darauf zugreifen. Ich bekomme den folgenden Fehler - 'window.content.document.defaultView.testFunction' ist keine Funktion. Ich habe versucht, 'testFunction' von der JavaScript-Konsole aus aufzurufen, und es funktionierte, aber die Erweiterung kann immer noch nicht darauf zugreifen. Füge ich etwas hinzu oder modifiziere meinen injizierten Javascript-Code in irgendeiner Weise? Danke noch einmal. –