Hans Hanson: ? document.layers["a"].document.layers["b"].document.write

Gruss,

Es ist da eine Datei mit Layern, in einen Layer wird eine weitere Datei geladen. Diese hat auch Layer.
Und in einem dieser Layer soll wieder was geschrieben
werden. NS bleibt bei diesem schreiben stecken.
? Hat wer eine Ahnung ?

Hier Auszüge aus den Dateien:

Ich lade in einen layer eine Datei.
.
.
.
<body>
<script language="JavaScript">
document.write("<layer name="Cont" left=0 top=112 width=800 height=420 clip=0,0,800,420 visibility=show src="Intro.htm"></layer>\n");
</script>
</body>

in der Datei "Intro.htm" steht unter anderem
<head>
<script language="JavaScript">

function writeLayer(wohin,was)
{ if (ns) with(document.layers["Cont"].document.layers[wohin].document) {  open(); write(was); close();}
  else document.all[wohin].innerHTML= was;
}

function start()
{
  strzw="<IMG SRC="gif/Gesch0P.gif" WIDTH="115" HEIGHT="19" BORDER="0"><IMG SRC="gif/GeschZw.gif" WIDTH="33" HEIGHT="19" BORDER="0">..."

writeLayer("MenUU",strzw);

</script>

</head>

<body onLoad="start();">
<script language="JavaScript">
document.write("<layer name="MenuUU" left=6 top=0 width=117 height=298 clip=0,298,117,0 visibility=hide z-Index=1></layer>\n");
</script>
</body>

Was passiert ist, dass beim  Schreiben in writeLayer
Netscape sich verbeisst (?)

Hat wer eine Idee ?

Danke

  1. Hi,

    function writeLayer(wohin,was)
    { if (ns) with(document.layers["Cont"].document.layers[wohin].document) {  open(); write(was); close();}
      else document.all[wohin].innerHTML= was;
    }

    Hier liegt der Hund begraben: du hast den Layer in einer externen
    Datei, d.h., das Script musst nicht den parent-Layer ansprechen.
    Richtig hiesse das so:

    function writeLayer(wohin,was)
    {

    if (ns) with(document.layers["wohin"].document)
      {
      open();
      write(was);
      close();
      }

    else
      {
      document.all[wohin].innerHTML= was;
      }

    }

    In dem Layer sollte auch vornherein etwas drin stehen, anscheinend
    kommt der NN mit einem leeren Layer nicht klar... pack einfach
    irgendeinen Plathalter rein.

    Ach ja, wie du sicher bemerkt hast: ich hab den layers["wohin"]-
    Fehler auch korrigiert *g*

    mfg
    CK1

    P.S.: Denk mal ueber einen vernuenftigen Schreibstil nach *g* das
    macht hinterher das debuggen einfacher .)

  2. Hallo Hans

    Und in einem dieser Layer soll wieder was geschrieben
    werden. NS bleibt bei diesem schreiben stecken.
    ? Hat wer eine Ahnung ?

    Du kannst das document.write-Geschreibsel leicht umgehen. Dann sollte auch der NN zurechtkommen.

    <script language="JavaScript">
    document.write("<layer name="Cont" left=0 top=112 width=800 height=420 clip=0,0,800,420 visibility=show src="Intro.htm"></layer>\n");
    </script>

    ersetzen durch

    <layer name="Cont" left=0 top=112 width=800 height=420 clip=0,0,800,420 visibility=show src="Intro.htm"></layer>

    Nur der NN4.x kennt den Layertag. Alle anderen ignorieren ihn sowieso. Er wird also nicht angezeigt.

    <script language="JavaScript">

    function writeLayer(wohin,was)
    { if (ns) with(document.layers["Cont"].document.layers[wohin].document) {  open(); write(was); close();}
      else document.all[wohin].innerHTML= was;
    }

    versuche mal, die Funktion in den header der Datei zu packen, die den Layer lädt. Entsprechend anders muß dann der Layer angesprochen werden.

    function start()
    {
      strzw="<IMG SRC="gif/Gesch0P.gif" WIDTH="115" HEIGHT="19" BORDER="0"><IMG SRC="gif/GeschZw.gif" WIDTH="33" HEIGHT="19" BORDER="0">..."

    writeLayer("MenUU",strzw);

    </script>

    hier fehlt ein Schließen der Funktion nach writeLayer(..);
    vielleicht auch ein Tippfehler. Auf jeden Fall darfst du writeLayer() erst nach der Funktion start() aufrufen.

    <body onLoad="start();">
    <script language="JavaScript">
    document.write("<layer name="MenuUU" left=6 top=0 width=117 height=298 clip=0,298,117,0 visibility=hide z-Index=1></layer>\n");
    </script>

    auch wieder einfach nur
    <layer name="MenuUU" left=6 top=0 width=117 height=298 clip=0,298,117,0 visibility=hide z-Index=1></layer>

    angeben.
    Zumindest ersparst du dir 2 mal den Layer mit document.write zu schreiben.

    Viele Grüße

    Antje