Lieber Struppi,
bei dem Versuch die Cursorposition innerhalb des auf designMode geschaltenen iFrames zu behalten, verzweifle ich fast an dem Konzept, das die Browser-Hersteller mit ihrem SELECTION und RANGE Objekten entwickelt haben.
Es will mir - zunächst versuche ich mich nur am Mozilla - nicht gelingen, die aktuelle selection in einer Variablen zu "konservieren", bzw. die Referenzen auf die in ihr gespeicherten Elemente. Meine Debug-Ausgaben servieren mir jedesmal die Tatsache, dass in meinem Objekt der Wert "undefined" abgelegt wurde, während eine Abfrage der entsprechenden Eigenschaft des selection-Objektes brav die echten Werte rausrückt.
Ich schnalle es einfach nicht. Ich habe mir angesehen, wie HTMLArea oder der TinyMCE das machen, aber die fügen immer auch etwas ein, was ich ja nicht tue. Trotzdem kann ich deren Ansätze nicht umsetzen. Es ist zum Heulen!!
Die zentrale Stelle ist die Funktion handleCursor:
handleCursor : function (mode) {
// "save" or "restore" cursor position
var iFrame = window.frames[Highlighter.settings.prefix + "codePreview"];
if (Highlighter.controls.browser == "gecko") {
var sel = iFrame.getSelection();
var range = sel.getRangeAt(0);
switch (mode) {
case "save":
Highlighter.controls.selection.focusNode = sel.focusNode;
Highlighter.controls.selection.focusOffset = sel.focusOffset;
alert("speichere: " + Highlighter.controls.selection.focusNode + " " + Highlighter.controls.selection.focusOffset);
break;
case "restore":
alert("lese: " + Highlighter.controls.selection.focusNode +" " + Highlighter.controls.selection.focusOffset);
// sel.focusNode = Highlighter.controls.selection.focusNode;
// sel.focusOffset = Highlighter.controls.selection.focusOffset;
break;
}
}
if (Highlighter.controls.browser == "IE") {
var range = iFrame.document.selection.createRange();
switch (mode) {
case "save":
Highlighter.controls.selection = range.duplicate();
break;
case "restore":
range = Highlighter.controls.selection;
break;
}
}
}
Neuester Versuch:
http://test.felix-riesterer.de/css_syntax_hilite/index.html (Seite)
http://test.felix-riesterer.de/css_syntax_hilite/syntaxhighlighter.js (Javascript)
Liebe Grüße aus Ellwangen,
Felix Riesterer.