Daniel unreg: Sind Conditional Comments invalid?

Hallo,

hier im Forum werden oft CCs empfohlen, seltener wird dann aber auch gesagt, dass diese ungültiger Code seien.

Ich habe mich gefragt ob das stimmt und wenn ja warum?

Ich habe nämlich in einem XHTML-Dokument folgende CCs eingbeaut:
<!--[if IE]>Hallo IE.<![endif]-->
<!--[if !IE]><!-->Hallo Browser.<!--<![endif]-->

Beides wird weder in Firefox und Opera (als XML-gesendet) noch in Christoph Schneegans Schema Validator angekreidet.

Ist es also ein Ammenmärchen, dass CCs invalid sind oder muss ich sie dennoch als Fehlerquelle fürchten?

Gruß;

  1. Ahoi,

    Ist es also ein Ammenmärchen, dass CCs invalid sind oder muss ich sie dennoch als Fehlerquelle fürchten?

    Für nicht-IE Engines sind CCs einfach HTML-Kommentare, wie du am <!-- ... --> erkennen kannst. Diese werden also völlig ignoriert inklusive allem was darin steht.
    Sie sind an sich also komplett valid. Was in CCs drin steht wird auf Validität nicht geprüft, darin können also durchaus unerkannte Fehler vorhanden sein.

    Gruß,
    Pablo

    --
    ie:% fl:| br:^ va:) ls:[ fo:) rl:? n4:( ss:) de:> js:| ch:? sh:( mo:) zu:)
    Aarakast.de
    1. Hallo,

      Was in CCs drin steht wird auf Validität nicht geprüft, darin können also durchaus unerkannte Fehler vorhanden sein.

      Das ist natürlich auch eine Frage, aber ich denke, da CCs ohnehin nur für IE/Win existent sind, befindet sich das ganze in einem Überschaubarem Rahmen.
      Sprich: Sollte sich IE 9.0 beim XML-Parsen an CCs verschlucken wäre das Problem rechtzeitig lösbar.

      Gruß;

  2. Ich grüsse den Cosmos,

    <!--[if IE]>Hallo IE.<![endif]-->

    Der ist nicht nur nicht erlaubt, sondern funktioniert auch nicht.
    Kommentare beginnen mit <!--{leerzeichen} und enden mit {leerzeichen}-->
    Die CCs kommen genau dazwischen, sind somit ein Kommentar und damit valide.

    Möge das "Self" mit euch sein

    --
    Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
    ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
    1. Hallo,

      Der ist nicht nur nicht erlaubt, sondern funktioniert auch nicht.

      Wo steht ersteres? Wie kommst du auf letzteres?

      Kommentare beginnen mit <!--{leerzeichen} und enden mit {leerzeichen}-->

      Das mit dem Leerzeichen wäre mir neu, davon steht nichts in der HTML-Spec oder anderen mir bekannten Quellen.
      Außerdem ist der Firefox recht streng im standardkonformen Modus, dieser Kommentar (der CC) geht jedoch durch, obwohl er das nicht sollte, wenn er nicht erlaubt wäre.

      Die CCs kommen genau dazwischen, sind somit ein Kommentar und damit valide.

      Da widersprichts du dir aber selbst.

      Kommentare beginnen mit <!--{leerzeichen} und enden mit {leerzeichen}-->

      Oder habe ich dich falsch verstanden?

      Gruß;

      1. Ich grüsse den Cosmos,

        Wo steht ersteres? Wie kommst du auf letzteres?

        <![endif]-->

        Vielleicht siehst du den Fehler selbst. Wenn nicht, darfst du dir das -- aus meiner Signatur ausleihen ;)

        Möge das "Self" mit euch sein

        --
        Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
        ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
        1. Hallo,

          <![endif]-->
          Vielleicht siehst du den Fehler selbst. Wenn nicht, darfst du dir das -- aus meiner Signatur ausleihen ;)

          Ich nehme an, du meinst, weil kein "--" nach "<!" steht?

          In
          <!--[if IE]>Hallo IE.<![endif]-->
          ist aber folgendes der Kommentar:
          [if IE]>Hallo IE.<![endif]

          Und obwohl ich zwar Gegner der Denkweise "wenn es funktioniert ist es in Ordnung" bin, bin ich doch sicher, dass Firefox und Opera diesen Kommentar durchaus richtig interpretieren (vor allem Firefox, der den Kommentar ja sonst anzeigen würde).

          Gruß;

          1. Ich grüsse den Cosmos,

            Und obwohl ich zwar Gegner der Denkweise "wenn es funktioniert ist es in Ordnung" bin, bin ich doch sicher, dass Firefox und Opera diesen Kommentar durchaus richtig interpretieren (vor allem Firefox, der den Kommentar ja sonst anzeigen würde).

            Ich vermute mal, das ich den Denkfehler hatte, da ich sowas nicht nutze. Du hast Recht. Ich nehme alles zurück und behaupte das Gegenteil.

            Möge das "Self" mit euch sein

            --
            Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
            ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
        2. Ahoi,

          <![endif]-->

          Du hast in deinem Zitat einen Teil vergessen:

          <!--[if IE]>[...]<![endif]-->

          Das <!-- muss vor dem [if IE] stehen, und nicht vor dem ![endif] :P
          das <![endif] ist teil des Kommentars und benötigt keine weitere Auszeichnung als Kommentar.

          Gruß,
          Pablo

          --
          ie:% fl:| br:^ va:) ls:[ fo:) rl:? n4:( ss:) de:> js:| ch:? sh:( mo:) zu:)
    2. Moin!

      <!--[if IE]>Hallo IE.<![endif]-->

      Der ist nicht nur nicht erlaubt, sondern funktioniert auch nicht.

      Definiere "funktioniert nicht". Was sollte denn "funktionieren"?

      Kommentare beginnen mit <!--{leerzeichen} und enden mit {leerzeichen}-->

      Falsch! Kommentare beginnen und enden exakt mit zwei Minuszeichen innerhalb von <! und >.

      Deshalb meckert der Validator z.B. bei solchen Kommentaren:
      <!-- ---------- -->

      Da die Anzahl der doppelten Minuszeichen ungerade ist, wird der Kommentar beständig geöffnet, geschlossen, geöffnet etc., bis am Ende ein offener Kommentar übrig bleibt.

      Die CCs kommen genau dazwischen, sind somit ein Kommentar und damit valide.

      Das ist ja auch der Sinn des Ganzen.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Moin,

        Falsch! Kommentare beginnen und enden exakt mit zwei Minuszeichen innerhalb von <! und >.

        Wobei SGML wenn ich mich recht erinnere mehrere Kommentare innerhalb einer Kommentarbegrenzung zulässt, weshalb

        <!-- ein Kommentar -- -- noch ein Kommentar-->

        ein valider Kommentar sein sollte. Auf die Anzahl der -- kommt es also an. Da das in der Praxis dann aber doch schief gehen kann ist es im Ergebnis sinnvoll zu empfehlen, zwischen <!-- und --> bitte kein Minusstriche oder > zu verwenden.

        Viele Grüße

        Swen Wacker

  3. Hi,

    hier im Forum werden oft CCs empfohlen, seltener wird dann aber auch gesagt, dass diese ungültiger Code seien.

    Das liegt daran, daß die "Kurzform", die auch MSDN als Beispiel vorzeigt, ggf. invalide ist.

    Ich habe nämlich in einem XHTML-Dokument folgende CCs eingbeaut:

    Dieses ist ein Konstrukt, daß den CC (wie MS ihn vorschlägt) so erweitert, daß er trotzdem valide ist.

    Gruß, Cybaer

    PS: Ein ähnliches Konstrukt gibt es übrigens, um bei JavaScript die (bei HTML übliche) Auskommentierung mit einer (bei XHTML üblichen) CDATA-Definition zu kombinieren, so daß der JS-Code trotz XML-Kompatibilität in Browsern auskommentiert ist, die kein SCRIPT kennen.

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hallo,

      Das liegt daran, daß die "Kurzform", die auch MSDN als Beispiel vorzeigt, ggf. invalide ist.

      Ich habe kurz nachgeschaut und weiß jetzt was du meinst.
      Glücklicherweise habe ich die kurzform außerhalb von MSDN noch nie gesehen, hat vermutlich damit zu tun, dass es keinen echten nutzen hat, da der Inhalt ja angezeigt werden würde, wenn man einen nicht-IE verwendet.

      PS: Ein ähnliches Konstrukt gibt es übrigens, um bei JavaScript die (bei HTML übliche) Auskommentierung mit einer (bei XHTML üblichen) CDATA-Definition zu kombinieren, so daß der JS-Code trotz XML-Kompatibilität in Browsern auskommentiert ist, die kein SCRIPT kennen.

      Meinst du das IE-spezifisch oder allgemein gültig?
      Ich verzichte aber ohnehin so gut wie möglich auf beide, da ich Skripte und Stylesheets gerne bestmöglich auslagere.

      Gruß;

      1. Hi,

        Glücklicherweise habe ich die kurzform außerhalb von MSDN noch nie gesehen, hat vermutlich damit zu tun, dass es keinen echten nutzen hat, da der Inhalt ja angezeigt werden würde, wenn man einen nicht-IE verwendet.

        <![if expression]> HTML <![endif]>

        Das sind für einen Nicht-IE (und ganz alte IEs) zwei unbekannte Deklarationen, mithin invalider Code. Da *HTML*-Browser aber per definitionem ihnen unbekannte Elemente ignorieren sollen, sehen die nur "HTML". Ergo: invalide, aber das stört niemanden - außer diejenigen, die sich ein "Valide-Pepperl" auf die Page tun möchten. ;)

        Meinst du das IE-spezifisch oder allgemein gültig?

        Allgemeingültig.

        Ich verzichte aber ohnehin so gut wie möglich auf beide, da ich Skripte und Stylesheets gerne bestmöglich auslagere.

        Keine Frage. :-)

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Hallo,

          Das sind für einen Nicht-IE (und ganz alte IEs) zwei unbekannte Deklarationen, mithin invalider Code. Da *HTML*-Browser aber per definitionem ihnen unbekannte Elemente ignorieren sollen, sehen die nur "HTML". Ergo: invalide, aber das stört niemanden - außer diejenigen, die sich ein "Valide-Pepperl" auf die Page tun möchten. ;)

          Meine Argument war ja, dass es angezeigt werden würde, denn dann wäre ja der Inhalt für jeden (HTML-)Browser sichtbar und nicht nur für IE.
          Hm, mir fällt gerade auf, dass die Kurzform eine "schönere" Form für mein zweites Beispiel wäre, aber halt nicht valid. Daher kommt sie für mich nicht in Frage.

          Gruß;