Wowbagger: NN und "relative" DIVs - ich werd' noch wahnsinnig...

hi leute,

das problem ist ja altbekannt, aber ich habe im archiv (und auch an anderen stellen) keine brauchbare lösung gefunden:

Angenommen ich definiere innerhalb einer tabelle einen layer und möchte dort dynamisch etwas hineinschreiben. Die position dieses layers möchte (=kann) ich nicht festlegen; sie soll relativ sein, so daß der browser sie selbst festlegen kann, wenn es z.b. zu einer größenändrerung des fensters kommt. NN hat nun das problem, ein DIV, welches über position:relative definiert wird nicht richtig zu erkennen:

seltsamer effekt A. :
<div id="s0" style="position:relative;visibility:visible;" align="center">
</div>

zugriff erfolgt dann mit: document.s0.document.open() / write() / close()

der layer wird erkannt, aber was auch immer ich dort hineinschreibe wandert ins gottverdammte nirvana!

na gut, andere lösung...die führt zu:
seltsamer effekt B.:
<div id="s0" style="position:relative;visibility:visible;" align="center">
<div id="nns0" style="position:absolute;visibility:visible;"></div>
</div>

die idee ist ja nicht übel: pack' halt einen _absoluten_ layer in den relativen und schreib deinen sch$%&ß dort 'rein....das aber quittiert NN mit

document.s0 has no properties.

bei einem zugriff a la
document.s0.document.nns0.document.open();

was natürlich nach bugs schreit...

lange rede kurzer sinn:
leute, ich mache diesen ganzen DHTML-dreck nicht erst seit gestern, aber dieses problem krieg' ich einfach nicht in den griff! Ich hoffe wirklich, jemand von euch da draußen kann's ein wenig besser und hat 'ne lösung parat, oder 'ne URL zu 'ner lösung, oder...wie auch immer (man bin ich genervt, sorry!)

bis denn und allen hier nachträglich 'n guten rutsch (hoffe alle sind "y2k-compatible" ins neue jahr(tausend) gekommen *g*)

/*,*/
Wowbagger

  1. Hallo  Wowbagger.

    <erst einmal einen Beruhigungstee reiche> Willkommen im Club. NS hat mich zu diesem Thema auch etliche Nerven gekostet. Letztlich aber funktionierte es. Die Lösung ist nicht sehr elegant, was mir am Ende aber ziemlich egal war. ;-)

    Grundsätzlich ist beim NS schon mal document.write fehlerhaft. Was auch immer dort im NS programmiert wurde, korrekt ausgeführt wird dies nur beim Laden der Seite. Jeder spätere Versuch document.write auszuführen, läßt die Daten im meist im Nirwana verschwinden :-(
    Darum lasse ich NS mit onResize="history.go(0)" die Seite jedes mal komplett neu aufbauen. (nicht zu verwecheln mit reload)

    Zusätzlich benutze ich ausschließlich absolute Positionierung. Da ich genausowenig wie Du weiß, wo die Layer tatsächlich liegen werden, bleibt mir nichts anderes übrig, als die Fenstergröße / Framegröße zuvor abzufragen und dann die Positionen daraus zu berechnen, die StyleSheet-Angaben zu schreiben und dann den Body.

    Man mag davon halten, was man will. Aber es funktioniert und ist crossbrowserfähig.
    Da die entsprechenden Seiten (noch) nicht online sind, bitte noch mal nachfragen, wenn Du Codeschnipsel brauchst.

    Viele Grüße
      Kess

    1. Hi Kess,

      <erst einmal einen Beruhigungstee reiche> Willkommen

      <schlürft>...aahhh, danke, das tut gut...

      im Club. NS hat mich zu diesem Thema auch etliche Nerven gekostet. Letztlich aber funktionierte es. Die Lösung ist nicht sehr elegant, was mir am Ende aber ziemlich egal war. ;-)

      da kann ich auch ein lied von singen...

      Zusätzlich benutze ich ausschließlich absolute Positionierung. Da ich genausowenig wie Du weiß, wo die Layer tatsächlich liegen werden, bleibt mir nichts anderes übrig, als die Fenstergröße / Framegröße zuvor abzufragen und dann die Positionen daraus zu berechnen, die StyleSheet-Angaben zu schreiben und dann den Body.

      ja, stimmt, es gibt fälle, da hab' ich das auch so gemacht...aber ich dachte es gäbe vielleicht 'ne andere (=bessere?) lösung :((

      normalerweise käme jetzt wieder mein typisches "NN ist ja so sch..."-gewimmer, aber nach der geschichte, die ich neulich mit dem IE4 und DHTML erlebt habe bin ich lieber ganz ruhig (ich sage nur: Dr. Watson!). Wollte mich eigentlich darüber im forum 'ausheulen', aber das problem war so code-spezifisch, daß es eigentlich kaum reproduzierbar ist (weis bis heute nihct, woran's eigentlich lag, hab' am ende dann die kiste einfach anders implementiert...) <ooopsvomthemaabgekommen>

      na ja...schade eigentlich, aber für den speziellen fall kann ich mich nicht einfach auf eine berechnung auf grundlage der framegröße verlassen...also wieder 'mal konzept ändern...

      danke trotzallem...
      /*,*/
      Wowbagger