Felix Riesterer: Problem gelöst - für's Archiv

Beitrag lesen

Liebe Selfer,

nachdem ich jetzt zwei ganze Tage daran gesessen habe, hier meine Lösung für's Archiv:

Man bekommt mit dem Aufruf der callback-Funktion vier Parameter übermittelt, wovon in den ersten dreien übermittelt wird, um welche Informationen nachgefragt wird. Den vierten kann man mit einer Funktion sozusagen "nachschlagen".
     fileBrowserCallBack(field_name, url, type, win);
In "field_name" steht z.B. "src" oder "href", "url" ist logischerweise noch leer, in "type" steht dann "image" oder "file" und in "win" ist eine Referenz zum aufrufenden Fenster enthalten.

Egal was man mit dieser Funktion auch anstellt, das jeweils aufrufende Dialogfenster kann wohl oder übel nur mit einer Funktion aus dem Set des Editors angesprochen werden, um ihm die ermittelten Werte zurückzugeben, da sich die Referenz zu "win" nicht in ein anderes Browserfenster retten lässt. Selbst der Versuch das Dialogfenster mittels seines Namens ("mcePopup") anzusprechen war umsonst.

In meinem Fall habe ich aus der callback-Funktion heraus ein neues Browserfenster geöffnet (window.open()), in welchem ich ein PHP-Skript aufrufe, das mir das Uploaden und Auswählen von Dateien ermöglicht. Dieses PHP-Skript bekommt dann auch einen Parameter, denn bei einem Bilderbrowser ist eine Voransicht ganz schön, bei einem Dateibrowser für mögliche Verlinkungen eher nicht...

Das große Problem war, die selektierte Datei dem ursprünglichen Dialogfenster des Editors zurückzugeben. Dazu _muss_ ein Set an Javascript-Funktionen des Editors im eigenen Browserfenster geladen sein! Es handelt sich dabei um die Datei tiny_mce_popup.js, die im Dateikopf in einem Scriptbereich nachgeladen werden _muss_! Zum Beispiel so:
     <script language="javascript" type="text/javascript" src="irgendwo/tiny_mce/tiny_mce_popup.js"></script>

Damit kann man dann die Referenz zu dem Dialogfenster ermitteln (ehemals der Parameter "win" aus dem callback-Aufruf), indem man aus diesem Set an Funktionen folgende einsetzt:
     win = tinyMCE.getWindowArg("window");
Damit kann man dann die ermittelten Informationen aus dem eigenen Dateibrowser übermitteln:
     win.document.getElementById(field_name).value = url;

Mögen meine Erkenntnisse anderen dienlich sein. Mir jedenfalls hat diese Mühsal auch Spaß gemacht, obwohl es für echten Spaß dann doch eindeutig zu lange gedauert hat ;-)
Ach ja, diese Javascript-nachlade-Datei lädt gleich noch eine CSS-Datei (ungefragt) mit. Wer die nicht will kann das href-Attribut im per Javascript in die Datei geschriebenen <link>-Tag "töten":
     document.getElementsByTagName("link")[??].removeAttribute("href");
Das richtige Tag erwischt man am ehesten, indem man als Index ("??")  den höchsten Wert einsetzt (vorher mit alert(getElementsByTagName("link").length) prüfen!).

Liebe Grüße aus Ellwangen,

Felix Riesterer.