Bernhard Kamp: Mozilla 1.2 / Javascript & DOM

Hallo,

Ich habe ein Problem in Verbindung mit dem neuen Mozilla 1.2
Im folgenden drei Scripte.

Im Beispiel 1 befindet sich die id "hardcoded" im body.

Im Beispiel 2 befindet sich die id "dynamisch geschrieben" im script-Bereich des head.

Im Beispiel 3 befindet sich die id "dynamisch geschrieben" im script-Bereich des body.
---------------------------------------------------------------
Beispiel 1. Funktioniert mit Mozilla unterhalb 1.2 und 1.2
---------------------------------------------------------------
<html>
<head>
<title>Test</title>
<script language="JavaScript" type="text/javascript">
function showit()
{document.getElementById("nav_1").style.visibility="visible";}
</script>
<body onload="showit();">
<div id="nav_1" style="position:absolute;visibility:hidden"><p>test</p></div>
</body>
</html>

---------------------------------------------------------------
Beispiel 2. Funktioniert nicht mit Mozilla 1.2, aber Mozilla unterhalb 1.2

Fehlermeldung bei 1.2 lautet
Error: document.getElementById("nav_1") has no properties
---------------------------------------------------------------
<html>
<head>
<title>Test</title>
<script language="JavaScript" type="text/javascript">
document.write('<div id="nav_1" style="position:absolute;visibility:hidden"><p>test</p></div>');
function showit()
{document.getElementById("nav_1").style.visibility="visible";}
</script>
<body onload="showit();">
</body>
</html>

---------------------------------------------------------------
Beispiel 3. Funktioniert wieder mit Mozilla unterhalb 1.2 und 1.2
---------------------------------------------------------------
<html>
<head>
<title>Test</title>
<script language="JavaScript" type="text/javascript">
function showit()
{
document.getElementById("nav_1").style.visibility="visible";
}
</script>
<body onload="showit();">
<script language="JavaScript" type="text/javascript">
document.write('<div id="nav_1" style="position:absolute;visibility:hidden"><p>test</p></div>');
</script>
</body>
</html>
---------------------------------------------------------------

Offensichtlich wird im Beispiel 2 die id nicht im Objektbaum "eingehängt". Hat jemand eine andere Erklärung ?

Gruß Bernhard

  1. Hallo,

    Offensichtlich wird im Beispiel 2 die id nicht im Objektbaum "eingehängt". Hat jemand eine andere Erklärung ?

    Ich könnte "Heftige Fehler im Code" als Erklärung anbieten.

    <html>
    <head>
    <title>Test</title>
    <script language="JavaScript" type="text/javascript">
    document.write('<div id="nav_1" style="position:absolute;visibility:hidden"><p>test</p></div>');
    function showit()
    {document.getElementById("nav_1").style.visibility="visible";}
    </script>
    <body onload="showit();">
    </body>
    </html>

    Erstens: Bin ich blind oder fehlt hier </head>?

    Zweitens: Im Code steht nichts was den Browser implizit zu der Annahme verleitet, der Head sei zu Ende, bis <body> kommt. Also: Dein Head geht bis zum Body.

    Drittens: Du schreibst also via JavaScript einen Div in den Head. Der hat da aber garantiert nichts verloren. Im Head zulässige Elemente findest Du in der HTML-Spec http://www.w3.org/TR/html4/struct/global.html#edef-HEAD.

    Fazit: Du hast fehlerhaften Code geschrieben. Es liegt keine fehlerhafte Darstellung von Mozilla 1.2 vor.

    Grüße,

    Utz

    1. Hallo Utz

      Ich könnte "Heftige Fehler im Code" als Erklärung anbieten
      Erstens: Bin ich blind oder fehlt hier </head>?

      Ups... Du hast natürlich recht. Den habe ich im meinem Original-Script schon drin. Keine Ahnung wie das passiert ist. Habe in der Mail noch rum geschrieben. Möglicherweise ist mir das dabei passiert.
      Aber Dein Hinweis auf http://www.w3.org/TR/html4/struct/global.html#edef-HEAD hat mir geholfen. Danke.

      Gruß Bernhard