2009-05-09 4 views
0
in die Webseite ein

Ich werde eine Firefox-Erweiterung entwickeln, die eine Schaltfläche in die geladenen Seiten einfügen soll, wenn das Tag: <input type="file" ... > gefunden wird und eine Datei ausgewählt wurde.So fügen Sie Elemente aus der Firefox-Erweiterung

Ähnlich verhält es sich mit der skype-Symbolleiste: Wenn eine Website eine Telefonnummer enthält, wandelt sie die Skype-Erweiterung automatisch in eine Schaltfläche um, über die Skype-Kontakte angerufen werden können.

Ich bin auf einem GNU/Linux-System, und leider ist die Skype-Erweiterung funktioniert nicht auf Linux-Versionen von Firefox/skype, also kann ich nicht einmal versuchen, etwas Reverse Engineering ...

Die firefox Erweiterung enthält die Datei overlay.js: Diese Datei enthält die Hauptlogik für die Erweiterung. Hier kann ich <input type="file" ... > Knoten einfach mit diesem Code finden:

onFileChosen: function(aEvent) { 
var input = aEvent.explicitOriginalTarget; 
if(input.type=="file"){ 
    alert(input.value); } 
} 

window.addEventListener("change", function(e) {xpitest.onFileChosen(e)},false); 

Also, wenn eine Datei ausgewählt wurde, ein Alarm-Fenster erscheint und zeigt die Dateinamen.

Aber, wie kann ich einen Knopf in der Seite setzen, wenn eine Datei gewählt worden ist?

Ich habe versucht mit den verschiedenen document.parentNode und ähnliche, aber nichts scheint zu funktionieren.

Oder ist es möglich, dass ich Sachen in die geladene Seite nicht setzen kann?

Dank

+0

Das geht mit Crossrider ganz schnell und einfach. Verwenden Sie einfach die integrierte jQuery-Unterstützung und binden Sie das Ereignis onchange für $ jquery ("input [type = file]"). Crossrider erstellt für Ihre crx, xpi und exe Erweiterungsdateien für Ihre Cross-Browser-Erweiterung. – shdev

Antwort

4

Vom Chrom Kontext, können Sie das aktuelle Inhalt Dokument (zum Beispiel der Seite mit der Dateiauswahl) mit top.window.content.document bekommen. An diesem Punkt ist es genau so, als ob Ihr JS auf der Seite läuft. Wenn das nicht hilft, poste bitte deinen Code mit so vielen Informationen wie möglich. Siehe auch Working with windows in chrome code.

Und Sie können definitiv Dinge in die Seite injizieren.

+0

Ich habe die gleiche Frage auf Mozillazin geschrieben: http://forums.mozillazine.org/viewtopic.php?f=19&t=1239905 überprüfen Sie es, es enthält die komplette overlay.js – Giancarlo

+0

Vielen Dank für die Buchung des Codes jedoch Es scheint nicht, dass Sie meinen Ratschlag befolgt haben (re: window.content.document). Es wäre auch effizienter (wenn möglich), die Seite nur einmal zum Zeitpunkt des Ladens zu scannen und Ereignislistener nur den Dateifeldern hinzuzufügen. Das würde verhindern, dass sich das ganze Fenster ändert (was die Dinge wahrscheinlich erheblich verlangsamen wird). –

+0

Ich bin mir der besten Effizienz bewusst, die Seite nur einmal zu scannen, ich werde das später implementieren. Das Ergebnis, das top.window.content.document und aEvent.explicitOriginalTarget verwendet, ist 'object HTMLInputElement', also denke ich, das sollte kein Problem sein ... Das Problem ist die Art, wie ich folgen sollte, um einen Knopf neben zu setzen die "Dateiauswahl", sonst nichts. Danke :) – Giancarlo

Verwandte Themen