molily: Javascript bereitet mit Firefox Probleme

Beitrag lesen

Hallo,

du verwendest XHTML 1.0, lieferst es aber als text/html aus (HTML-kompatibles XHTML). Daher verwenden die Browser keinen XML-Parser zum Verarbeiten des Codes, sondern ihren HTML-Parser - den man auch Tag-Soup-Parser nennt, weil er nicht wirklich definierten Regeln folgt, sondern sehr fehlertolerant und gemäß eigenem Ermessen Markup in einen DOM-Baum überführt.

Wenn du die XML-typische Schreibweise für leere Elemente benutzt
<element ... />
Dann haben die Browser damit u.U. Probleme, wenn das Dokument als text/html verarbeitet wird. Bei Elementen, deren End-Tag schon in HTML optional ist, kannst du das machen, z.B. <meta />, <br />, <input /> usw.

Aber der End-Tag von script ist in HTML nicht weglassbar, also erwarten ihn einige Browser (hier Firefox) zwingend. <script /> wird vom Firefox nicht als ganzes Element umgesetzt, sondern nur als Start-Tag interpretiert!

Wenn du also schreibst:

<script type="text/javascript" src="http://karatelyss.ch/scripts/jquery.js" />

<script type="text/javascript">

$(document).ready(function() {
   $("#logintoggle").click(function() {
       $("#loginform").slideToggle("slow");
      });
  });

</script>

Dann parst Firefox das folgendermaßen: Er sieht <script src="..." /> als ein script-Start-Tag mit einem src an. Wenn er das findet, dann ignoriert er den Inhalt dieses Elements und lädt nur das externe Script.
Was danach kommt, sieht er als Inhalt des script-Elements an. <script type="text/javascript"> ignoriert er, weil es es als script-Inhalt ansieht.
Erst </script> sieht er schließlich als End-Tag des script-Elements an und schließt es damit.

Es kommt also *ein* script-Element mit src-Attribut heraus und einem Inhalt, den Firefox gänzlich ignoriert.

Solche Elemente solltest du in HTML-kompatiblem XHTML immer vollständig notieren, auch wenn sie leer sind:

<script ...></script>

Mathias