Henry: Warum werden Kommentare geparst?

Hallo,

gibt es einen logischen Grund weshalb Kommentare geparst werden?

Beispiel:

<script>

/*
Extern zb. <script src="xy.js"></script> 
*/
function machtnix(){return false;}

</script>

Das bringt natürlich Probleme, weil die Browser versuchen das Element im Kommentar zu verwenden(warum?). Mögliche Abhilfe wäre die Klammern durch Entsprechungen zu ersetzen oder, so wie ich das meist mache, durch zusätzliche HTML Kommentare(ist das überhaupt zu empfehlen? Wenn ich mir hier die Vorschau anschaue dann nicht, obwohl es funktioniert)

<script>

/*
<!--
Extern zb. <script src="xy.js"></script> 

-->
*/


</script>

Aber zurück zu meiner Frage. Warum werden Kommentare nicht einfach als das vom Browser gesehen, was sie auch sind, unwichtig fürs Funktionieren des HTML/SCRIPT? Es wäre kein Parsing notwendig, der Ersteller braucht sich keine Gedanken machen und kann alles reinschreiben wie es im Sinn kommt, auch als sicherer Container eine gute Sache und letztendlich geringere Laufzeit.

Ach ja und noch was, warum tritt die Problematik nur bei eingebundenen Dateien auf, nicht aber wenn der gleiche Inhalt von extern kommt?

Gruss
Henry

  1. Tach!

    gibt es einen logischen Grund weshalb Kommentare geparst werden?

    Nicht wie du dir das vorstellst. Zuerst kommt der HTML-Parser und findet das <script>-Tag. Daraufhin sucht er sich das nächste </script> und ignoriert alles dazwischen. Javascript- und Kommentare anderer Sprachen kennt er nicht und weiß deshalb auch nicht, dass du da gern was ausgeklammert sehen möchtest. Das weiß erst der Javascript-Parser

    Mögliche Abhilfe wäre die Klammern durch Entsprechungen zu ersetzen

    Es gibt diverse Möglichkeiten. Allem voran das Auslagern in eine eigene Datei umgeht diese und andere Hürden. Ansonsten darf ein </script>, das nicht das Ende des Bereiches kennzeichnet, nicht als solches dastehen. Je nach Kontext, in dem es im Javascript-Code steht, kann man es entsprechend maskieren. Im Kommentarbereich kannst du dir etwas beliebiges einfallen lassen. HTML-Kommentare oder ein CDATA-Bereich müsste auch helfen.

    Ach ja und noch was, warum tritt die Problematik nur bei eingebundenen Dateien auf, nicht aber wenn der gleiche Inhalt von extern kommt?

    Weil es dann nicht der HTML-Parser zu Gesicht bekommt.

    dedlfix.

  2. @@Henry

    gibt es einen logischen Grund weshalb Kommentare geparst werden?

    Du meinst vom HTML-Parser?

    Beispiel:

    <script>
    
    /*
    Extern zb. <script src="xy.js"></script> 
    */
    function machtnix(){return false;}
    
    </script>
    

    In dem Beispiel gibt es für den HTML-Parser keinen Kommentar.

    LLAP 🖖

    --
    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  3. gibt es einen logischen Grund weshalb Kommentare geparst werden?

    Das hat nichts mit dem Kommentar zu tun. Du darfst zwischen dem öffnenden <script> und dem schließenden </script> einfach die Zeichenkette </script> nicht verwenden. Bei genaurem Überlegen macht das auch Sinn, denn woher sollte der Browser wissen, welches schließende Tag jetzt das richtige ist? Man hat dann einfach die Konvention gefasst, dass das erste schließende script-Tag immer das Element beendet.

    Wenn du sowas closing = "</script>" oder sowas /* </script> */ brauchst, kann du den Slash mit einem Backslash maskieren, dann ist es wieder gültige Syntax, also: closing = "<\/script>" bzw. /* <\/script> */.

    Wenn du externe JavaScripts verlinken würdest, statt sie inline einzubetten, bräuchtest du diese Krücke nicht. Das ist also ein Besonderheit des HTML-Parsers.

    1. Hallo alle,

      erst mal danke für eure schnellen Antworten.

      @1unitedpower
      Bei genaurem Überlegen macht das auch Sinn, denn woher sollte der Browser wissen, welches schließende Tag jetzt das richtige ist?

      Zum Beispiel indem das W3C mittlerweile festgelegt hätte, dass es einheitliche Kommentarauszeichnungen für alles gibt, html, css, js, etc. oder eben zumindest einheitlich zu behandeln. Die eventuellen Vorteil habe ich ja schon geschrieben, eventuelle Nachteile sind mir keine bewusst. Wie gesagt mir geht's nur um die Logik dahinter, dieses Warum?

      <Nostalgie title="nichtwichtig">
      Und, btw. ich vermisse <xmp>, soweit ich mich erinnern kann, konnte ich dort alles reinschreiben ohne mir darüber Gedanken zu machen, glaube sogar(bin nicht ganz sicher?) zb. <xmp>bla <Body> bla </xmp>blabla</xmp>, also sogar xmp-abschluss innerhalb. Da wurde nichts geparst.
      </Nostalgie>

      Gruss
      Henry

      1. @1unitedpower
        Bei genaurem Überlegen macht das auch Sinn, denn woher sollte der Browser wissen, welches schließende Tag jetzt das richtige ist?

        Zum Beispiel indem das W3C mittlerweile festgelegt hätte, dass es einheitliche Kommentarauszeichnungen für alles gibt, html, css, js, etc. oder eben zumindest einheitlich zu behandeln.

        JavaScript wird von ECMA International entwickelt nicht vom W3C. Das W3C spezifiziert lediglich die Browser-Schnittstellen. Davon abgesehen würde dein Vorschlag das Problem nicht lösen, denn hier geht es um Kontextwechsel zwischen HTML und JavaScript, nicht um die Kommentar-Syntax. Deshalb habe ich ja auch nochmal ein zweites Beispiel gebracht, das das selbe Problem hat, aber überhaupt keine Kommentare nutzt.

      2. Tach!

        Zum Beispiel indem das W3C mittlerweile festgelegt hätte, dass es einheitliche Kommentarauszeichnungen für alles gibt, html, css, js, etc. oder eben zumindest einheitlich zu behandeln.

        So weit reicht die Zuständigkeit des W3C nicht, dass es für alle Sprachen einheitliche Kommentare festlegen könnte. Auch JavaScript ist kein W3C-Produkt.

        Die eventuellen Vorteil habe ich ja schon geschrieben, eventuelle Nachteile sind mir keine bewusst. Wie gesagt mir geht's nur um die Logik dahinter, dieses Warum?

        Die Logik ist, dass ein Parser für eine bestimmte Sprache sich um seinen Kram kümmert, und nicht auch noch alle anderen Sprachen beherrschen muss. Und das müsste er, um erkennen zu können, ob etwas ein Kommentar oder ein String ist oder sonstwas.

        <Nostalgie title="nichtwichtig">
        Und, btw. ich vermisse <xmp>, soweit ich mich erinnern kann, konnte ich dort alles reinschreiben ohne mir darüber Gedanken zu machen, glaube sogar(bin nicht ganz sicher?) zb. <xmp>bla <Body> bla </xmp>blabla</xmp>, also sogar xmp-abschluss innerhalb. Da wurde nichts geparst.
        </Nostalgie>

        Selbst wenn das so war/ist, natürlich muss da was geparst werden, oder wie sollte da das (passende) Ende gefunden werden?

        dedlfix.

        1. Hallo dedlfix,

          Die Logik ist, dass ein Parser für eine bestimmte Sprache sich um seinen Kram kümmert, und nicht auch noch alle anderen Sprachen beherrschen muss.

          Na ja, wenn HTML sowieso schon CSS+JS Kommentare einzuschätzen weiß, warum dann nicht konsequent, Wäre ja nun kein Aufwand zu bestimmen, dass <!-- gleich zu behandeln wäre wie /* oder //, oder sehe ich das zu naiv?

          Selbst wenn das so war/ist, natürlich muss da was geparst werden, oder wie sollte da das (passende) Ende gefunden werden?

          hmm, jetzt glaube ich auch nicht mehr, dass es so war, aber sonst alles drin möglich. 😉

          Gruss
          Henry

          1. Hallo @Henry,

            Na ja, wenn HTML sowieso schon CSS+JS Kommentare einzuschätzen weiß, warum dann nicht konsequent, Wäre ja nun kein Aufwand zu bestimmen, dass <!-- gleich zu behandeln wäre wie /* oder //, oder sehe ich das zu naiv?

            HTML weiß eben keine außer seinen eigenen Kommentaren, denn CSS und JS werden separat davon verarbeitet und haben ihre eigene, von HTML abweichende Syntax.

            Dazu kommt, dass deine Änderung jede Menge vorhandenen Code durcheinander brächte und neue Escapingregeln erforderte.

            Viele Grüße
            Robert

        2. Hi there,

          Auch JavaScript ist nicht kein W3C-Produkt.

          Ich danke Dir dafür, daß mich das minutenlange Nachdenken über den Sinn dieses Satzes von meinen Problemen beim Debugging abgelenkt hat…

          1. Tach!

            Auch JavaScript ist nicht kein W3C-Produkt.

            Ich danke Dir dafür, daß mich das minutenlange Nachdenken über den Sinn dieses Satzes von meinen Problemen beim Debugging abgelenkt hat…

            Aufstehen und eine Runde durchs Büro laufen hilft auch.

            dedlfix.

            1. Hi there,

              Aufstehen und eine Runde durchs Büro laufen hilft auch.

              Dabei fall' ich immer über Kabel...;(

              1. Hallo,

                Dabei fall' ich immer über Kabel...;(

                wie, noch kein Power over Wlan? 😎

                Gruß
                Jürgen

                1. Hi there,

                  Dabei fall' ich immer über Kabel...;(

                  wie, noch kein Power over Wlan? 😎

                  Willst Du Böser etwa die kostbare Atemluft in meinem Büro ionisieren???

              2. Hallo,

                Aufstehen und eine Runde durchs Büro laufen hilft auch.

                Dabei fall' ich immer über Kabel...;(

                dann lauf halt 'ne Eckige…

                Gruß
                Kalk

        3. @@dedlfix

          So weit reicht die Zuständigkeit des W3C nicht, dass es für alle Sprachen einheitliche Kommentare festlegen könnte. Auch JavaScript ist kein W3C-Produkt.

          Auch SGML (die Grundlage der Syntax von HTML) ist kein W3C-Produkt.

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann