Elya: Validator erkennt fiesen Fehler nicht !?

Hallo Forum,

als ich heute morgen erhebliche Darstellungsprobleme mit einer Seite in Opera 6/7 hatte, jagte ich sie durch den Validator, bis sie valide war. Dennoch stellte Opera fast nichts dar. Schließlich fand ich den Fehler im head:

//--></script
</head>
<body>

Die fehlende Tag-Klammer wurde vom Validator also nicht als Fehler erkannt! Wie kann das sein? Ich dachte erst, es werden <script> Bereiche vielleicht völlig ignoriert, aber an anderer Stelle wird der Scriptbereich ja auch bemerkt und ggf. Fehler angezeigt, z.B. falsch positioniert o.ä. Und letzten Endes ist <script></script> ja auch html...

Verstehe ich da in der Funktionsweise des Validators etwas falsch oder bin ich schlicht an seine Grenzen gestoßen?

Schöne Grüße aus Köln-Ehrenfeld,

Elya

--
We are still confused, but on a higher level.
  1. Hallo Forum,

    hallo

    ich spiele jetzt mal validator: ich finde den tag <script type="text/javascript"> erkenne, dass jetzt alles irgendein script ist und suche nach dem </script> tag ... doch leider kann ich den nicht finden

    //--></script

    ----------------^ da fehlt was

    </head>
    <body>

    Die fehlende Tag-Klammer wurde vom Validator also nicht als Fehler erkannt!

    ja weil der denkt das ist noch script :-) ... deshalb siehst du im opera auch nichts ...

    cu
    ulli

    1. Hi Ulli,

      aber müßte er dann nicht das fehlende </script> Tag beanstanden?

      Schöne Grüße aus Köln-Ehrenfeld,

      Elya

      --
      We are still confused, but on a higher level.
      1. Hi Ulli,

        hallo elya

        aber müßte er dann nicht das fehlende </script> Tag beanstanden?

        hmm ... eigentlich schon ... bin mir aber nicht sicher

        Schöne Grüße aus Köln-Ehrenfeld,

        grüße aus bln-lichtenberg

        Elya

        cu
        ulli

  2. Hi,

    als ich heute morgen erhebliche Darstellungsprobleme mit einer Seite in Opera 6/7 hatte, jagte ich sie durch den Validator, bis sie valide war. Dennoch stellte Opera fast nichts dar. Schließlich fand ich den Fehler im head:

    //--></script
    </head>
    <body>
    Die fehlende Tag-Klammer wurde vom Validator also nicht als Fehler erkannt!

    Ich vermute - mangels SGML-ISO kann ich es nicht überprüfen (aber ich leg auch keine 250 Fränkli auf den Tisch für das Teil) - daß das mit

    SHORTTAG YES

    zusammenhängt, das in der SGML-Deklaration zu HTML 4.01 drinsteht.

    In HTML 4.01 dürfte das aufgrund dieses  SHORTTAG YES formal korrekt sein...

    (wenn mir aber jemand das Gegenteil beweist, ziehe ich die Vermutung zurück)

    Selbst wenn es erlaubt wäre - es bietet sich dann doch an, die tags immer zu schließen mit >, da - wie Du ja festgestellt hast - die Browser nicht damit klar kommen...

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. Hallo Andreas,

      Selbst wenn es erlaubt wäre - es bietet sich dann doch an, die tags immer zu schließen mit >, da - wie Du ja festgestellt hast - die Browser nicht damit klar kommen...

      Ich hatte auch nicht vor, mit neuen Schreibweisen an der Dateigröße zu feilen :-) - war halt in irgendeinem Stadium der Seitenentwicklung verloren gegangen... Interessant, daß auch der sonst so gestrenge Mozilla so problemlos damit umgegangen ist!

      Schöne Grüße aus Köln-Ehrenfeld,

      Elya

      --
      We are still confused, but on a higher level.
  3. schreib für nen kommentaranfang

    <!--

    und fürs ende

    -->

    die // kommen nicht so gut is mir aufgefallen

    denke mal dass der die zeile ignoriert. weil sie noch im <script> drin ist.

    und da drin heisst // zeile ignorieren.
    daher kriegt der dein --> nicht mit und hat daher wohl n fehler

    mfg
     Martin

    1. Moin!

      schreib für nen kommentaranfang
      <!--
      und fürs ende
      -->
      die // kommen nicht so gut is mir aufgefallen

      Die kommen wunderprächtig! Denn ansonsten kriegst du Javascriptfehler. "--" ist nämlich ein Javascript-Operator - und wenn man das HTML-Kommentarende schreiben will, stößt Javascript eben zwangsläufig auf "--". Deshalb wird das HTML-Kommentarende vor Javascript geschützt, indem ein Javascript-Kommentarzeichen davorgestellt wird: "//".

      Führt zu "//-->"

      denke mal dass der die zeile ignoriert. weil sie noch im <script> drin ist.

      Der Inhalt von <script></script> wird vom Validator ohnehin ignoriert - inklusive der darin enthaltenen HTML-Kommentare. Das ist die Definition des Script-Elements.

      Nur gibt es eben seltsame Auswüchse im HTML-Standard. Gewisse Dinge müssen nicht zwingend vorhanden sein, obwohl sie eigentlich undenkbar sind. Lass zum Beispiel einfach mal <body> weg - das ist weiterhin valides HTML 4.01!

      - Sven Rautenberg

      --
      ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
      1. Hi,

        Der Inhalt von <script></script> wird vom Validator ohnehin ignoriert

        Kleine Ergänzung/Korrektur.

        Das erste Vorkommen des end-tag open delimiter </ gilt für HTML (und damit für den Validator) als Ende des Scriptbereichs.
        <script type="text/javascript">
        document.write("<div>bla</div>");
        </script>

        ist also inkorrekt, da
        div>");
        formal nicht mehr zum Script-Element-Inhalt gehört (es müßte document.write("<div>bla</div>"); heißen oder die Zeichenfolge </ auf andere Weise unterbrochen werden).

        siehe auch: http://www.w3.org/TR/html401/types.html#type-cdata

        Nur gibt es eben seltsame Auswüchse im HTML-Standard. Gewisse Dinge müssen nicht zwingend vorhanden sein, obwohl sie eigentlich undenkbar sind. Lass zum Beispiel einfach mal <body> weg - das ist weiterhin valides HTML 4.01!

        Zustimmung, das sind wirklich Auswüchse.
        Nur gut, daß es XHTML gibt... ;-)

        cu,
        Andreas

        --
        Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
        http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
        1. hi,

          Das erste Vorkommen des end-tag open delimiter </ gilt für HTML (und damit für den Validator) als Ende des Scriptbereichs.
          <script type="text/javascript">
          document.write("<div>bla</div>");
          </script>

          ist also inkorrekt, da
          div>");
          formal nicht mehr zum Script-Element-Inhalt gehört (es müßte document.write("<div>bla</div>"); heißen oder die Zeichenfolge </ auf andere Weise unterbrochen werden).

          ich denke mal, es liegt einfach daran, dass der validator durch // eine javascript-kommentarzeile eingeleitet sieht, und danach einfach gar nicht mehr mit einem html-tag rechnet, sondern alles bis ans zeilenende als JS-kommentar ansieht, der ihn nicht weiter interessiert.

          ob dieses verhalten jetzt korrekt ist oder nicht, übersteigt meine kenntnisse.

          aber vielleicht probierst du, elya, dein eingangsbeispiel ja noch mal mit einem zeilenumbruch zwischen //--> und </script aus,

          //--></script
          </head>
          <body>

          gruss,
          wahsaga

          1. Hi,

            ich denke mal, es liegt einfach daran, dass der validator durch // eine javascript-kommentarzeile eingeleitet sieht,

            Nein, denn der Validator guckt sich den Inhalt des Scriptelements nicht an, denn dann müßte er theoretisch alle Scriptsprachen und insbesondere deren Kommentar-Regeln kennen - er sucht nur nach dessen Ende, sprich, dem end-tag open delimiter </

            Ich bleibe immer noch bei meiner Vermutung, daß es am SHORTTAG YES in der SGML-Deklaration von HTML liegt, die das Weglassen des > erlaubt.

            cu,
            Andreas

            --
            Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
            http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
            1. Hallo Ihr 2,

              Das hab ich nach Deinem Posting tatsächlich ausprobiert und es war trotz

              //-->
              </script
              </head>
              <body>

              valide! Ich glaub dir das mal mit dem SHORTTAG YES, auch wenn es ein wenig über meinen Horizont geht - aber man lernt ja gerne wieder mal was Neues ;-)

              Schöne Grüße aus Köln-Ehrenfeld,

              Elya

              --
              We are still confused, but on a higher level.
            2. Hallo Andreas,

              ich denke mal, es liegt einfach daran, dass der validator durch // eine javascript-kommentarzeile eingeleitet sieht,

              Nein, denn der Validator guckt sich den Inhalt des Scriptelements nicht an, denn dann müßte er theoretisch alle Scriptsprachen und insbesondere deren Kommentar-Regeln kennen - er sucht nur nach dessen Ende, sprich, dem end-tag open delimiter </

              Dem kann ich auch nur zustimmen.

              -----------
              @Elya
              Den Inhalt vom <script> und auch vom <style> stellt man in HTML-Kommentar: <!--   --> das soll dafür sorgen, dass Browser die <script> nicht kennen/unterstützen den Inhalt nicht interpretieren.
              So geht auch der Validator vor, also ignoriert er den Inhalt vom <script> der // ist nur für JavaScript.
              -----------

              Ich bleibe immer noch bei meiner Vermutung, daß es am SHORTTAG YES in der SGML-Deklaration von HTML liegt, die das Weglassen des > erlaubt.

              Stimmt.

              Das ist z.B. noch immer valides HTML:
              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
              <title/test/
              <p/nix<br />nix/

              Grüße
              Thomas