Entwickler-Ecke

Wünsche, Anregungen & Kritik - Buttons im Beitragseditor funktionieren nicht


Heiko - So 07.03.10 12:16
Titel: Buttons im Beitragseditor funktionieren nicht
Wenn man bei Opera im Beitragseditor auf z.B. "b" drückt, kommt in der Fehlerkonsole immer:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Uncaught exception: TypeError: Cannot convert 'document.post.message.caretPos' to object

Error thrown at line 430, column 2 in isSelection() in http://www.delphi-forum.de/scripts/posting.js:
    return document.post.message.caretPos.text.length > 0;
called from line 484, column 1 in bbstyle(bbid) in http://www.delphi-forum.de/scripts/posting.js:
    isSel = isSelection();
called from line 1, column 0 in <anonymous function>(event):
    bbstyle('b')

Die anderen Buttons ergeben den gleichen Fehler (nur nen leicht anderen Stacktrace ;) ).


Christian S. - So 07.03.10 12:21

:autsch: Mach ich jetzt für die 3% der User, die Opera benutzen, noch eine Browserweiche für verschiedene Opera-Versionen? :gruebel: :?


Heiko - So 07.03.10 12:31

Nein - besserer Code würde da schon reichen :P

Aktuell:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function isSelection() {
  document.post.message.focus();
  if (is_ie4up)
    return  document.selection.createRange().text != '';
  else if (is_gecko)
    return document.post.message.selectionStart != document.post.message.selectionEnd;
  else if (is_opera)
    return document.post.message.caretPos.text.length > 0;
  else return false
}

Wie du siehst, scheitert hier genau die Opera-Code-Zeile. Ich kann dir zwar nicht sagen, warum caretPos nicht mehr existiert, aber chöner Code fragt nicht den Browser ab, sondern schaut, welche Features es gibt. Bei diesem Verfahren hätte Opera automatisch die FF-Version genommen, die scheinbar funktioniert (selectionStart kennt er zu mindestens, das End habe ich aber nicht getestet).

Neuer (ungetester) Code:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function isSelection() {
  document.post.message.focus();
  if (document.post.message.selectionStart)
    return document.post.message.selectionStart != document.post.message.selectionEnd;
  else if (ocument.post.message.caretPos)
    return document.post.message.caretPos.text.length > 0;
  else if (document.selection.createRange)
    return  document.selection.createRange().text != '';
  return false;
}


Regan - So 07.03.10 12:40

user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
:autsch: Mach ich jetzt für die 3% der User, die Opera benutzen, noch eine Browserweiche für verschiedene Opera-Versionen? :gruebel: :?

Ich glaube, die Frage ist eher, wann endlich alle Browser standardkonform werden.


Martok - So 07.03.10 18:28

user profile iconHeiko hat folgendes geschrieben Zum zitierten Posting springen:
Bei diesem Verfahren hätte Opera automatisch die FF-Version genommen, die scheinbar funktioniert (selectionStart kennt er zu mindestens, das End habe ich aber nicht getestet).


user profile iconRegan hat folgendes geschrieben Zum zitierten Posting springen:
Ich glaube, die Frage ist eher, wann endlich alle Browser standardkonform werden.

Sie arbeiten ja anscheinend dran ;)


Gausi - So 07.03.10 20:59

Also ich fänd das auch toll, wenn sich das bei Gelegenheit einbauen ließe. Ich gehör nämlich auch zu diesen 3%. :angel:


JoelH - Mo 08.03.10 09:54

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Ich gehör nämlich auch zu diesen 3%. :angel:


Ich auch :)

Wie kann ich eigentlich diesen Fehler reproduzieren? Ich habs irgendwie nicht kapiert :(


jfheins - Mo 08.03.10 10:01

Auch für den Fix :angel:

Hab nämlich keine Lust, die die EE auch n Userscript zu schreiben ...


Heiko - Mo 08.03.10 11:47

user profile iconJoelH hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich eigentlich diesen Fehler reproduzieren? Ich habs irgendwie nicht kapiert :(

Fehlerkonsole oder per Dragonfly (Seite->Entwicklerwerkzeuge)


BenBE - Mo 08.03.10 23:28

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Ich gehör nämlich auch zu diesen 3%. :angel:

Kommt doch bitte erstmal über die 5%-Hürde, bevor ihr mitreden dürft :mrgreen:

Bin aber generell auch für die Feature-Check-based-Variante, da die i.A. am besten auch auf unbekannte Browser eingehen kann. Dann hat man u.U. sogar gleich nen Case, wo man Christian automatisch nen Object-Dump zuschicken lassen könnte, wenn alle Varianten fehlschlagen, d.h. der Browser unbekannt ist oder ein anderer Fehler auftritt. Ansonsten ist man geänderten Features doch nur unnötig ausgesetzt.


jfheins - Di 09.03.10 10:40

Ich fühle mich an meinen DP-Hack erinnert :mrgreen:

C#-Quelltext
1:
2:
3:
4:
5:
6:
window.opera.defineMagicFunction('isMicrosoft',
  function (oRealFunc, oThis, oParam1)
  {
    return true;
  }
);

Immer diese Browserweichen :roll: