nam: Script wird nicht ausgeführt

Hallo

Ich steh wieder mal auf dem Schlauch.
Auf der folgenden Seite sollte doch der alert('bar'); ausgeführt werden. Funktioniert in Safari tiptop, aber Firefox (3.0.3) und IE zeigen kein alert an.
Eine Fehlermeldung gibt es nicht.
Die Seite ist gemäss W3C-Validator und Validome valides XHTML.

  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de-DE">  
  
<head>  
 <title>Test</title>  
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
 <script src="foo.js" type="text/javascript" />  
    <script type="text/javascript">  
  alert('bar');  
    </script>  
</head>  
<body>  
 <p>Testseite</p>  
</body>  
</html>  

Hier noch der Link zum schnell ausprobieren.
http://www.mnn.ch/diversa/scripttag/index.html

Was mache ich falsch?

Gruss und danke,
Mathias

  1. Hi,

    <script src="foo.js" type="text/javascript" />

    Die "XML-Schreibweise" fuer ein inhaltsleeres Element ist bei <script> sehr problematisch, nicht alle Browser koennen damit umgehen.
    Probiere es mal auf die "althergebrachte" Weise,
    <script src="foo.js" type="text/javascript"></script>

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
  2. Hallo,

    http://www.mnn.ch/diversa/scripttag/index.html

    Du schreibst HTML-kompatibles XHTML, d.h. du setzt es den Browsern als text/html und der Dateiendung .html vor. Die Browser verarbeiten den Code dann nicht gemäß XML-Regeln, sondern benutzen ihren Standard-Parser für HTML-Tagsoup. Wenn sie dann auf ein <script /> treffen, dann interpretieren sie das u.U. als Start-Tag, also als <script>, nicht als vollständiges, leeres Element in der Kurzschreibweise. Du musst immer <script></script> schreiben, um HTML-kompatibel zu sein. Das gilt für alle Elemente, die Inhalt haben können. Elemente ohne Inhalt wie meta sollte man aber immer als <meta /> und nicht als <meta></meta> notieren.
    Mit Firebug kannst du sehen, was Firefox aus deinem Code macht: Nämlich *ein* script-Element mit src-Attribut, deren Inhalt ignoriert wird, es wird nur das verlinkte Script geladen.

    Mathias

    1. Danke molily und ChrisB,
      genau das wars. Sollte ein Validator das nicht erkennen?

      Gruss,
      Mathias

      1. Hi,

        Sollte ein Validator das nicht erkennen?

        Theoretisch korrekt fuer XHTML ist die Kurzschreibweise ja - validiert also logischerweise auch.

        Nur wenn das ganze, wie molily schon sagte, praktisch dann durch einen (HTML) Tag Soup Parser gejagt wird, geht's halt schief - was ja aber an der Validitaet an sich nichts aendert.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
      2. Hallo,

        Sollte ein Validator das nicht erkennen?

        Es ist kein Problem der Validität, sondern der Praxistauglichkeit.

        Validität hat im XML-Kontext eine sehr begrenzte Bedeutung, nämlich die syntaktische Korrektheit hinsichtlich einer Grammatik, die in einer XML-DTD ausgedrückt ist. Diese Korrektheit ist äußerst wichtig, aber lange nicht hinreichend für ein praktisch funktionsfähiges Dokument - vor allem bei XHTML als text/html ist viel mehr zu beachten.

        Einige Tools erkennen über diese Validität im engeren Sinne hinaus praktische Probleme und geben Warnungen aus:

        http://schneegans.de/sv/?url=http%3A%2F%2Fwww.mnn.ch%2Fdiversa%2Fscripttag%2Findex.html

        Für XHTML sollte man sowieso ausschließlich den Schema-Validator von Christoph Schneegans verwenden.

        http://qa-dev.w3.org/~bjoern/appendix-c/validator/?uri=http%3A%2F%2Fwww.mnn.ch%2Fdiversa%2Fscripttag%2Findex.html

        Dieser Validator prüft XHTML ausschließlich auf seine Konformität zu den Richtlinien zur Abwärtskompatibilität und zeigt ebenfalls, dass dein Dokument verbesserungsfähig ist, auch wenn es valide ist.

        Mathias

  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de-DE">

    <head>
    <title>Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script src="foo.js" type="text/javascript" />
        <script type="text/javascript">

    function alertNow() {
    alert('bar');
    }
    </script>

    </head>

    <body onLoad="alertNow();">

    <p>Testseite</p>

    oder
    <p><a href="#" onClick="alertNow();">Klick hier</a></p>

    </body>
    </html>

    
    
    1. Hallo,

      <body onLoad="alertNow();">
      <p><a href="#" onClick="alertNow();">Klick hier</a></p>

      Wieso empfiehlst du, <http://de.selfhtml.org/html/xhtml/unterschiede.htm#kleinschreibung@title=ungültiges XHTML> zu schreiben?

      Mathias

      1. <body onLoad="alertNow();">
        <p><a href="#" onClick="alertNow();">Klick hier</a></p>

        Wieso empfiehlst du, <http://de.selfhtml.org/html/xhtml/unterschiede.htm#kleinschreibung@title=ungültiges XHTML> zu schreiben?

        Ups, ja kann ja mal passieren, wenn man teils mit HTML 4.01 und teils mit XHTML programmiert. Sollte aber spätestens beim Validieren auffallen!

        1. Hallo,

          <body onLoad="alertNow();">
          <p><a href="#" onClick="alertNow();">Klick hier</a></p>
          Wieso empfiehlst du, <http://de.selfhtml.org/html/xhtml/unterschiede.htm#kleinschreibung@title=ungültiges XHTML> zu schreiben?
          Ups, ja kann ja mal passieren, wenn man teils mit HTML 4.01 und teils mit XHTML programmiert. Sollte aber spätestens beim Validieren auffallen!

          dürfte einem aber gar nicht passieren, wenn man auch in HTML die "richtige" Schreibweise verwenden würde. ;-)
          Und ... hmmmm ... wird XHTML _programmiert_? *grübel*

          So long,
           Martin

          --
          Wenn man keine Ahnung hat - einfach mal Fresse halten.
            (Dieter Nuhr, deutscher Kabarettist)