createRange killed IE 6
Frank
- dhtml
0 MudGuard0 Frank0 Alexander Foken0 Frank0 Alexander Foken0 Frank
Hallo an alle die sich über jeden IE-Bug? freuen.
Mit diesem Code gelingt es zuverlässig IE 6 SP1 abzuschießen. Oder mache ich einen Fehler?
Der Code ist aufs notwendigste reduziert. HIER klicken meint direkt das Wort HIER.
Der Zweck des Codes ist, dass über Buttons Text genau an die Stelle eingefügt werden soll, wo sich der Cursor befindet.
Bin dankbar für jeden Workaround.
Frank
<html><head>
<body>
<script type="text/javascript">
<!--
function StoreCursor(o,i){
o.caretPos = document.selection.createRange().duplicate();
}
//-->
</script></head>
<form action="savequest.php" method="post">
<textarea onClick="StoreCursor(this,5)" name="at_0"rows="2" cols="100">Einmal HIER klicken
</textarea>
<textarea onClick="StoreCursor(this,6)" name="at_1" rows="2" cols="100">Dann HIER klicken und 'entfernen' drücken
</textarea>
</form>
<a href="javascript:self.close()">Senden</a>
</body></html>
Hi,
<html><head>
title ist zwingend vorgeschrieben, Doctype ebenso...
<body>
<script type="text/javascript">
<!--
function StoreCursor(o,i){
o.caretPos = document.selection.createRange().duplicate();
}
//-->
</script></head>
<form action="savequest.php" method="post">
<textarea onClick="StoreCursor(this,5)" name="at_0"rows="2" cols="100">Einmal HIER klicken
vor rows fehlt (mindestens) ein Whitespace
</textarea>
<textarea onClick="StoreCursor(this,6)" name="at_1" rows="2" cols="100">Dann HIER klicken und 'entfernen' drücken
</textarea>
</form>
<a href="javascript:self.close()">Senden</a>
Links, die nur mit Javascript funktionieren, sollten auch mit Javascript ins Dokument geschrieben werden.
</body></html>
cu,
Andreas
Hi Andreas,
ich habe hier nur die (fehl)-Funktionalität der eigentlichen Seite zusammenkopiert und auf ein Minimum eingedampft. Auch der <body>-tag steht an der falschen Stelle. Aber auch Deine Korrekturen ändern nichts am Absturz.
Grüße
Frank
Moin Moin !
ich habe hier nur die (fehl)-Funktionalität der eigentlichen Seite zusammenkopiert und auf ein Minimum eingedampft. Auch der <body>-tag steht an der falschen Stelle. Aber auch Deine Korrekturen ändern nichts am Absturz.
Aus täglicher Praxis:
* IE-Cache leeren und Rechner neu starten
* auf anderem Rechner nochmals testen
* andere IE-Versionen (auf anderen Rechnern) testen
* andere Browser testen
* Service Packs und Hotfixes suchen ...
Alexander
* IE-Cache leeren und Rechner neu starten
* auf anderem Rechner nochmals testen
alles gemacht: kein Erfolg. win2000 + XP beide mit IE6 ->Absturz
(Bin schon 2 Tage am werkeln, mein Post hier ist die 'Ultima Ratio')
* andere Browser testen
document.selection.createRange() gibts nur bei IE
* Service Packs und Hotfixes suchen ...
Kann ICH machen, aber doch nicht meinen Anwendern zumuten
Danke+Grüße
Frank
Moin Moin !
* andere Browser testen
document.selection.createRange() gibts nur bei IE* Service Packs und Hotfixes suchen ...
Kann ICH machen, aber doch nicht meinen Anwendern zumuten
Arbeitest Du für ein LAN? Dann sollte es auch eine Möglichkeit geben, Hotfixes einzuspielen. (Und sei es als Mail-Attachment namens hotlezsex.exe ;-) )
Arbeitest Du für's Internet? Dann ist "IE only" wahrscheinlich der falsche Weg.
Davon abgesehen: Hast Du schonmal bei Microsoft in der Knowledge Base gesucht?
Alexander
Hi Alexander,
Arbeitest Du für ein LAN? Dann sollte es auch eine Möglichkeit geben, Hotfixes einzuspielen. (Und sei es als Mail-Attachment namens hotlezsex.exe ;-) )
Es ist ein eingeschränkter Personenkreis (ein paar hundert) im Internet.
Es nicht "IE only" - nur fehlt bei den anderen Browsern eben der Komfort, dass eingefügt Texte an der richtigen Stelle stehen. Sie stehen dann eben am Ende. Da NS ab Version 6 auch das textarea.selectionEnd nicht mehr unterstützt, müssen die NS-User damit leben, die Textblöcke nachträglich zu verschieben. (Ich bin sicher, die NS-Fans werden auch das noch als Vorteil und Weiterentwicklung verteidigen ;-) - es schafft schließlich eine innigere Bindung zum Text)
Davon abgesehen: Hast Du schonmal bei Microsoft in der Knowledge Base gesucht?
Habe gesucht und nicht gefunden.
ABER ich habe selbst eine Lösung gefunden.
Anstatt caretPos als Unterobjekte der Textareas zu definieren, mache ich ein eigenes Objekt auf, welches dann regelmäßig nur caretPos für die zuletzt angeklickte textarea enthält. Das läuft stabil.
function insfield() {
this.caretPos = false;
}
var oinsfield = new insfield();
function StoreCursor(o,i){
if (o.createTextRange){ //IE
oinsfield.caretPos=document.selection.createRange().duplicate();
}
else if (parent.roben.document.getElementById && !parent.roben.document.all) // Mozilla
mozselEnd = o.selectionEnd;
}
Grüße
Frank