(ZUR INFO) Bug bei dyn. in einen Layer(NN) geschrieber style="" Angabe
Ingo Symannek
0 Thomas J.S.0 Joachim
Hi,
mein Problem bezüglich NN hat sich als ziemlich kniffelig herausgestellt, wogegen die IE Lösung problemlos funktioniert.
Nun, da gibt es eine Baumstruktur wie im MSExplorer mit Links die dyn. aufgebaut wird.
Die einzelnen Blätter bestehen beim NN aus je 2 Layern. Der erste Layer wird statisch positioniert und beinhaltet ein icon, sowie einen weiteren Layer, der zu 100% Höhe und Weite den Rest des ersten Layers einnimmt. In diesem zweiten Layer befindet sich die ein <a>,<b>,<font>,<nobr> Tag sowie der Linktext.
Um in dieser Baumstruktur ein Rollovereffekt mit fehlender Linkunterstreichung darzustellen, muß wie üblich im NN der HTML Inhalt des zweiten Layers dyn. ausgetauscht werden. Für die Linkuntersteichung gibt es beim IE den a:hover {} CSS. Beim NN muß dieser emuliert werden.
Dafür brauche ich pro Layer in der Baumstruktur eine eigene style Angabe. Diese habe ich abwechselnd in oben erwähneten <a>,<b> und <font> Tag ausprobiert. Als das nichts genützt hat habe ich auch noch einen SPAN Tag eingebaut. Da er aber nicht benötigt wird, habe ich ihn wieder rausgenommen.
Der Baum wird auch ganz korrekt beim ersten mal aufgebaut, doch ein Blick in den erzeugten Quellcode läßt einem die Haare zu Kopf stehen.
Wenn die Layer dyn. angelegt werden, erzeugt ein Javascript zuerst ein größeren String. Dieser wird mit writeln() in einen Layer geschrieben.
Jetzt kommts, er Tag, welcher die style="soundso" Definition trägt, wird bei Übernahme des von Javascript korrekt erzeugten Strings falsch übernommen.
Er exisitiert direkt zweimal. Zuerst die richtige Version, danach noch eine zweite Version des Tags (Richtig, plötzlich standen da 2 <a> oder <b> oder <font> Tags im Code). Er wurde WIEDERHOLT mit dem kleinen Unterschied, daß die Style Definition hat einen Schreibfehler Ttyle="soundso" hatte. Nach erneutem Laden der Seite machte der NN schlapp und stütze sich aus dem Fenster.
Anfangs dachte ich ein Bug in meinem mittlerweile ziemlich komplexen Script währe der Fehler.
Doch läßt sich nachweisen, das von Javascript erzeugte String korrekt ist, bevor er dyn. in das Dokument geschieben wird.
z.B. der Code
<a href=soundso style="text-decoration:none">MeinText<a>
wurde mit document.write() in einen Layer geschrieben. Der danach aufgerufene Seitenquellcode sah dann wie folgt aus:
<a href=soundso style="text-decoration:none"><a href=soundso Ttyle="text-decoration:none">MeinText</a>
Ich frage mich nur noch, wie NN auf "Ttyle" (Der erste Buchstabe "s" wurde bei der Wiederholung durch ein "T" vertauscht) kommt. (Groß T wie der Anfang einer Borland Klasse?)
Falls sich irgendeiner dafür interessiert, kann ich Ihm den Code mal zusenden...
Tschö
Ingo
(Getestet mit NN4.08 und NN4.5)
Hallo Ingo!
<a href=soundso style="text-decoration:none"><a href=soundso Ttyle="text-decoration:none">MeinText</a>
Keine Sorge, das ist nicht das Problem!
Diese Art vom Code schreibt NS bei mit JS erzeugten Inhalten immer, hat aber keine auswirkung auf die Seite. Es ist so weit es nachvollzuziehen ist nur im Quelltextviewer vom NS existent.
Vor nich allzu lange Zeit hatten wir etwas darüber hier im Forum, liegt im Archiv irgendwo (sorry, aber ich bin zu faul dazu den Link jetzt heraussuchen)
Grüße
Thomas
hi Ingo,
nach meiner Erfahrung ist dynamisches Schreiben fuer Rollover eh nicht so geeignet, das reagiert sehr traege, und bleibt manchmal haengen.
Ich habe fuer mich einfach zwei fast identische Layer uebereinandergelegt, die_beide_den Link enthalten, nur, dass beim obere der Link schwarz, beim unteren rot ist.
Per onmouseover wird der obere versteckt, bei onmouseout wieder gezeigt - klappt einwandfrei.
Das ist vielleicht nicht die Loesung Deines Problems, - aber, etwas abgewandelt, ein workaround.
Gruss Joachim