Andreas Nikisch: Layer + JavaScript = merkwürdiges Verhalten?

Hallo,

ich bin gerade dabei ein JS zu entwickeln, welches dynamisch einen Layer einfügt, der eine beliebige Datei nachladen soll und bin auf ein merkwürdiges Verhalten gestoßen.

Hier sind mal meine Dateien:

datei1.html:

<html>
<head>
<title></title>
</head>
<body bgcolor="#00cc00">
<div align="center">

<table>
<tr>
<td>
<table>
<tr>
<td>

<script>
document.write('<ilayer clip="0,0,300,200"><layer src="datei2.html" width=300 height=200></layer></ilayer>');
</script>

</td>
</tr>
</table>
</td>
</tr>
</table>

</div>
</body>
</html>
--------------------------

datei2.html:

<html>
<head>
<title></title>
</head>
<body bgcolor="#008000">

<table width="300">
<tr>
<td height="200" align="center" valign="middle">
Hallo :)
</td>
</tr>
</table>

</body>
</html>
--------------------------

Also in datei1.html soll datei2.html nachgeladen werden. Leider kann ich (für dieses JavaScript) keinen onLoad im <body> Tag machen, den Layer nicht direkt reinschreiben! Es soll allein mit dem eingefügten JavaScript funktionieren. Wenn ich die Seite nun lade steht "Hallo : )" gleich 2x da. Hat datei2.html ein Hintergrundbild, dann kann es passieren, dass dieses im ganzen Dokument dargestellt wird.

Mache ich nun folgendes in datei1.html:

<html>
<head>
<title></title>
</head>
<body bgcolor="#00cc00">
<div align="center">
<table>
<tr>
<td>
<table>
<tr>
<td>
<script>

document.write('<ilayer clip="0,0,300,200" id="lay1"><layer width=300 height=200 id="lay2"></layer></ilayer>');
window.setTimeout("document.lay1.document.lay2.load("datei2.html",300);",1);

</script>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body>
</html>
--------------------------

Dann klappt plötzlich alles. Allerdings gefällt mir die Lösung nicht so gut. Ist das überhaupt "legal"? Weiß jemand etwas besseres? Oder ist das eine brauchbare Lösung?

Vielen Dank!

Ciao,
Andy

  1. Also in datei1.html soll datei2.html nachgeladen werden.

    Warum hast Du diese ganzen Tag ? Ich sehe da eine DIV - darin zwei verschachtelte Tabellen - darin einen Inline-Layer und in diesem noch einen normalen Layer.

    Waere ich ein Browser, wuerde ich mich auch weigern irgendwas darzustellen.

    Dein
    <layer src="datei2.html" width=300 height=200></layer>
    allein genuegt eigentlich. Wenn Du noch Position angibst hast Du genau das was Du willst - zumindest in Netscape.

    Ansonsten schau mal unter
    http://www.aquilon.de/anleitung.html
    Dort ist unter anderen auch das Laden einer fremden Datei beschrieben.

    Viele Gruesse, Thomas Hieck

    1. Hallo,

      Warum hast Du diese ganzen Tag ? Ich sehe da eine DIV - darin zwei verschachtelte Tabellen - darin einen Inline-Layer und in diesem noch einen normalen Layer.

      Waere ich ein Browser, wuerde ich mich auch weigern irgendwas darzustellen.

      Die Seiten waren auch nur ein Beispiel. Stell dir vor auf der Seite ist rechts eine Naviagtionsleiste (1.Table) und in dem Text-Teil ist noch eine Tabelle in der dann der Tag steht. Ich hab nur mal alles weggekürzt um zu zeigen, dass es nicht an etwas anderem liegt.

      Dein
      <layer src="datei2.html" width=300 height=200></layer>
      allein genuegt eigentlich. Wenn Du noch Position angibst hast Du genau das was Du willst - zumindest in Netscape.

      Nein ist es nicht - der Layer soll sich ja ins Seitenlyout einfügen. Und der Inline Layer
      alleine zeigte bei mir den nachgeladenen Inhalt versetzt an. Darum habe ich da zwei Layer
      ineinader gelegt. (Das mache ich schon länger so und das hat sich auch bewährt, obwohl es recht merkwürdig aussieht - wenn jemand etwas besseres dazu weiß - bitte melden)

      Es soll sich ungefähr so wie ein IFrame verhalten.

      Per JavaScript wird es eingefügt, weil nicht eine statische HTML Seite geladen wird sondern
      ein CGI, wobei noch die aktuelle URL per JavaScript übergeben werden soll. Und ich kann eben halt nicht den Inhalt z.B. mit onLoad nachladen.

      Sorry aber das sind einfach die Bedingungen, dir mir zur Verfügung stehen.

      Ich finde es halt nur recht merkwürdig, dass schon zwei verschachtelte Tables genügen um Netscape dazu zu bewegen den Inhalt der zweiten Datei doppelt auszugeben. Ich würde nur gerne wissen, ob dieser Weg, den ich da genommen habe richtig ist...

      Ciao,
        Andy

      1. Hallo Andreas!

        Ich würde nur gerne wissen, ob dieser Weg, den ich da genommen habe richtig ist...

        Ich kann azu nich viel sagen, aber möchte zu bedenken geben, daß der NS5 dynamische Layer nicht mehr unterstützen wird. So gesehen finde ich, daß du dir jetzt viel zu viel Arbeit aufhalst, die dann um sonst gewesen sein mag.

        Grüße
        Thomas

        1. Hallo Thomas,

          Ich kann azu nich viel sagen, aber möchte zu bedenken geben, daß der NS5 dynamische Layer nicht mehr unterstützen wird. So gesehen finde ich, daß du dir jetzt viel zu viel Arbeit aufhalst, die dann um sonst gewesen sein mag.

          Das ist mir eigentlich egal - ich bin sogar froh darüber, weil ich mich dann mit dem Zeug auf NS4 beschränken kann. Der IE und NS5 werden natürlich auch unterstützt - hier kann ich ja die IFRAMES verwenden - da funktioniert es ja problemlos! Ich hab das alles in meinem Beispiel nur weggelassen, damit man sieht, dass es nicht an dem anderen Zeug liegt sondern an den Tables und dem Layer...

          Der Punkt dabei ist halt, dass es auch in nächster Zeit noch viele NS4 User gibt und die auch unterstützt werden sollen.

          Ich würde nur gerne wissen ob man es so machen kann oder obs eben nur zufällig funktioniert...

          Ciao,
          Andy