Sind HTML-Kommentare in Skript-Tags eine bewährte Methode? [geschlossen]

97

Die folgende Vorgehensweise ist in dem Inline-JavaScript, mit dem ich arbeiten muss, ziemlich üblich:

<script type="text/javascript">
   <!--
       // Code goes here
   //-->
</script>

Ich weiß, dass es darum geht, zu verhindern, dass Browser, die nicht mit JavaScript kompatibel sind, die Quelle rendern. Aber ist dies auch heute noch eine bewährte Methode? Die überwiegende Mehrheit der heute verwendeten Browser kann JavaScript interpretieren. Selbst moderne mobile Geräte haben normalerweise keine Probleme.

Was das "Warum nicht?" Frage: Ich musste kürzlich mehrere Stunden damit verbringen, ein Problem zu debuggen, bei dem jemand das '//' vor einem '->' am Ende eines Skript-Tags weggelassen hatte, das tief in einigen Seiten vergraben war, und dies verursachte mysteriöses JavaScript Fehler.

Wie geht's? Wird dies immer noch als "Best Practice" angesehen?

AndreiM
quelle

Antworten:

118

Wichtig ist, dass es heutzutage irrelevant ist, ob ein bestimmter Browser JavaScript unterstützt oder nicht (dies ist eindeutig die große Mehrheit) - es ist irrelevant, da fast alle Skriptblöcke verstehen, was bedeutet, dass sie wissen, dass sie JavaScript ignorieren müssen, auch wenn sie dies nicht können interpretiere es.

Matt Kruse gibt eine etwas ausführlichere Erklärung auf seiner JavaScript - Toolbox - Website, warum speziell nicht HTML - Kommentare innerhalb Skriptblock zu verwenden.

Zitiert von dieser Seite:


Verwenden Sie keine HTML-Kommentare in Skriptblöcken

In den alten Tagen von Javascript (1995) hatten einige Browser wie Netscape 1.0 keine Unterstützung oder Kenntnis des Skript-Tags. Als Javascript zum ersten Mal veröffentlicht wurde, war eine Technik erforderlich, um den Code vor älteren Browsern zu verbergen, damit er nicht als Text auf der Seite angezeigt wird. Der 'Hack' bestand darin, HTML-Kommentare innerhalb des Skriptblocks zu verwenden, um den Code auszublenden.

Verwenden von HTML-Kommentaren im Skript ist schlecht

// DON'T do this! Code is just representative on how things were done
<script language="javascript">
<!--
   // code here
//-->
</script>

Kein heute gebräuchlicher Browser kennt das <script> -Tag nicht, sodass das Ausblenden der Javascript-Quelle nicht mehr erforderlich ist. Tatsächlich kann es aus folgenden Gründen als schädlich angesehen werden:

  • In XHTML-Dokumenten wird die Quelle tatsächlich vor allen Browsern verborgen und unbrauchbar
  • - ist in HTML-Kommentaren nicht zulässig, daher sind Dekrementierungsvorgänge im Skript ungültig
Noldorin
quelle
1
+1. Ich wusste, dass es jemanden gab, der viele Informationen zu diesem Thema aus meinen Tagen in comp.lang.javascript hatte. Ich habe die Archive der Newsgroup durchgesehen, als Ihre Antwort erschien und Matt zitierte.
Grant Wagner
1
In XHTML könnten Sie eine CDATA anstelle des HTML-Kommentars verwenden: <script ...> // <! [CDATA [... //]]> </ script>
Concrete Gannet
Ich sollte hinzufügen, dass dieser 'Hack' einen Fehler in Internet Explorer 9 erzeugt (Ein Client hat sich über eine Seite beschwert, die nicht richtig funktioniert hat und dies war die Ursache)
lordscales91
24

Ich habe damit aufgehört. Irgendwann müssen Sie nur noch Ihr NCSA-Mosaik loslassen.

Chaos
quelle
7
Mit anderen Worten, es gibt keinen Grund, warum das OP damit aufhören sollte. Sie schlagen vor, dass er damit aufhören sollte, weil Sie es getan haben, was nicht gut genug ist, um eine Antwort IMO zu sein.
Lawrence Aiello
1
@ LawrenceAiello: Was ist mit dem Ausdruck "Best Practice", der Sie an "Fakten" und nicht an "Meinungen" denken lässt?
Chaos
5
Nun, darin liegt der ultimative Fehler in diesem gesamten Beitrag. Es hätte geschlossen werden sollen, da es sich um eine Diskussionsfrage handelt.
Lawrence Aiello
1
Als dies vor sechs Jahren veröffentlicht wurde, war dies möglicherweise eine Antwort, nach den heutigen Standards der Website jedoch nicht.
j08691
1
Diese Antwort wird auf Meta SO
CubeJockey
10

Laut W3C - Empfehlung war es vor allem nützlich , um die Skriptdaten von User - Agents zu verbergen.

Zitiert von der W3c-Seite :

Kommentieren von Skripten in JavaScript Die JavaScript-Engine ermöglicht das "<!--"Auftreten der Zeichenfolge am Anfang eines SCRIPT-Elements und ignoriert weitere Zeichen bis zum Ende der Zeile. JavaScript interpretiert "//" als Beginn eines Kommentars, der bis zum Ende der aktuellen Zeile reicht. Dies ist erforderlich, um die Zeichenfolge "->" vor dem JavaScript-Parser auszublenden.

    <SCRIPT type="text/javascript">
<!--  to hide script contents from old browsers
  function square(i) {
    document.write("The call passed ", i ," to the function.","<BR>")
    return i * i
  }
  document.write("The function returned ",square(5),".")
// end hiding contents from old browsers  -->
</SCRIPT>
Webrsk
quelle
2
Wenn HTML 4.x verwendet wird. Bei XHTML ist das eine ganz andere Geschichte.
Quentin
8

Nein, es handelt sich um einen Kater aufgrund einer Problemumgehung, die bei der Einführung des Skriptelements verwendet wurde. Kein Browser versteht das Skriptelement heute nicht (auch wenn er es als "Skript, das ignoriert werden sollte, weil die Skripterstellung deaktiviert oder nicht unterstützt wird" versteht).

In XHTML sind sie aktiv schädlich.

Ich habe vor einiger Zeit etwas über die Geschichte geschrieben .

QUentin
quelle
3

Ich habe vor einiger Zeit damit aufgehört. Laut Douglas Crockford können Sie das Typattribut auch aus Ihren Skript-Tags löschen, da JavaScript die einzige in den meisten Browsern verfügbare Skriptsprache ist.

Jake McGraw
quelle
1
Die meisten Browser funktionieren weiterhin, es verstößt jedoch gegen die HTML-Spezifikation, daher würde ich es nicht empfehlen.
Quentin
4
Sie wissen nie, wann IE VB-Skript als Standardtyp nehmen wird.
Francis
1

Wenn Sie manuell tippen, empfehlen wir Ihnen, immer externe JS-Dateien zu verwenden, was sehr hilfreich wäre.

In Bezug auf Ihr Anliegen: Die meisten Browser sind heute JavaScript-sicher. Manchmal schreiben die Leute jedoch einfache Parser, um einen HTML-Code direkt abzurufen - und ich muss sagen, das sichere Zitat ist für diese Kunden wirklich hilfreich. Auch einige Nicht-JS-Clients wie der alte Lynx würden davon profitieren.

Francis
quelle
1

Wenn Sie keinen Literaltext zwischen Skript-Tags einfügen, dh wenn Sie Skripte aus src-Dateien laden, können Sie die Kommentare vergessen.

kennebec
quelle
0

Ich habe vor Ewigkeiten damit aufgehört. Du brauchst es heutzutage wirklich nicht mehr.

John Topley
quelle
@Yvette Was ist Ihre Motivation, diesen Kommentar sechs Jahre nach meiner Antwort zu veröffentlichen?
John Topley
@ Yvette Nichts für ungut, ich war nur neugierig. Und natürlich hast du recht; heutzutage hätte ich es als Kommentar gepostet.
John Topley
-1

Ich mache das nicht, aber neulich habe ich meine passwortgeschützte Site bei w3c überprüft. Also musste ich ihre direkte Eingabemethode verwenden. Es hat sich über mein Javascript beschwert, also habe ich die Kommentare wieder eingefügt, alles war in Ordnung.

JoshBerke
quelle