Kategorie: Webentwicklung
Als ich den FCKeditor mit Javascript auslesen wollte um den Inhalt per Ajax zu verarbeiten, bin ich auf ein Problem gestoßen. Und zwar legt der FCKeditor ein Hidden-Input Feld an, in welches er den Inhalt des Editors speichert, wenn das Formular in dem sich der Editor befindet per Submit abgefeuert wird. Das Problem an der Sache ist, dass bei direktem Zugriff per Javascript das Formular nicht per Submit abgefeuert wird.
Durch genauere Analysen und mit Hilfe der Seite von Holger Schöttle bin ich zu einer Lösung gekommen:
Der FCKEditor beinhaltet eine Methode die für das Updaten des versteckten Input-Feldes zuständig ist. Diese Methode wird jedoch nur bei einem Submit aufgerufen. Hier setzt die Lösung an, es muss eben genau diese Methode vor Zugriff auf das Feld von Hand ausgeführt werden.
Zum Verständnis ein kurzer Einblick in die Funktionsweise des FCKeditors:
Der Editor legt beim Erstellen das schon erwähnte Input-Feld an. Des Weiteren werden noch mehr Felder erstellt sowie ein I-Frame indem sich der Editor selbst dann befindet. Auf genau dieses I-Frame muss zugegriffen werden um die Update-Funktion aufzurufen. Man kann nun hin gehen und das I-Frame direkt ansprechen mittels:
parent.frames[framename].FCK.UpdateLinkedField();
Jedoch ist das ein mühseliges Unterfangen, jedesmal genau den passenden Frame anzusprechen. Somit kann man auch folgende Funktion verwenden:
function FCKHack() {
for ( i = 0; i < parent.frames.length; ++i ) {
if ( parent.frames[i].FCK )
parent.frames[i].FCK.UpdateLinkedField();
}
}
Wird diese Funktion nun direkt vor dem Zugriff auf ein FCKeditor-Input-Feld aufgerufen, so befindet sich der Inhalt des FCKeditors auch in dem Feld, ohne das ein Submit ausgeführt wurde. Die Funktion geht nämlich alle Frames durch und schaut ob es sich um ein FCKeditor handelt, wenn ja, dann wird die Update-Funktion aufgerufen.
FCKHack();
var FCKtext = document.getElementById('FCKeditorName').value;
alert(FCKtext);
document.getElementById('FCKeditorName').value = "Hallo".
Noch
document.getElementById('FCKeditorName').innerHTML = "Hallo";
Danke für ne Antwort
Gruess BINZ
Habe mich rumgeplagt damit und wollte das Frame auch manuell auslesen, aber die Funktion ist sehr nützlich.
wenn man den editor per nicht direkt startet sondern in per javascript in einem neuen div einfügt dann kommt immer die fehler meldung das er die window sonstwas nicht lesen kann. zugriff wurde verweigert.
mhmm wie dem auch sei. die lösung:
function FCKHack() {
frames[1].FCK.UpdateLinkedField();
var Eingabe = window.prompt("Bitte gib den Dateinamen ein", "")
document.getElementById("FCKeditorName").value = Eingabe;
}
dann gehts auch ohne fehler gg
Habe gestern abend bis spät in die nacht gesessen und den piss fehler nicht gefunden entschuldigt den ausdruck. ;-) Heute morgen kam mir die erlauchtung :-p
achso wichtig!
wenn ihr den editor direkt aufruft dann ändert frames[1].FCK.UpdateLinkedField();
zu
frames[0].FCK.UpdateLinkedField();
grüße Armon
vielen dank
rolf
schönes How-To ... und ich war schon kurz davor, mein Project vorzeitig zu beenden.
Aber eine Frage habe ich da noch:
Ich musste die htmlentities vom FCKEditor deaktivieren, da in den Entities das kaufmännische Und vorkamen, die aber wiederrum das per AJAX übergebene Request negativ beeinflusst haben. Dieses Problem scheint gelöst. Aber wenn ich jetzt mit dem FCKEditor schreibe und ein kaufmännisches Und benutze, dann habe ich ja wieder das Problem ... gibt es dafür einen Lösungsansatz?
Gruß
Andre
prima Sache. Funktioniert sogar auf Anhieb.
Gibt es denn schon auch ein Workaround über die umgekehrte Geschichte? Ich meine, wie ich das Ergebnis eines AJAX-requests in den Editor schieben kann? Da bastel ich mir einen zurecht und nichts geht derzeit.
Vielen Dank
Andre