Verwenden Sie das HTML-Kommentar-Tag <! - ->, das für JavaScript-Code noch relevant ist?

79

Ist es immer noch relevant, ein HTML-Kommentar-Tag für JavaScript-Code zu verwenden?

ich meine

<html>
    <body>
        <script type="text/javascript">
            //<!--
            document.write("Hello World!");
            //-->
        </script>
    </body>
</html>
rajakvk
quelle
Bitte beachten Sie, dass neben Browsern auch JavaScript verwendet wird. Schließen Sie auch sehr alte Browser aus.
Rajakvk

Antworten:

108

HTML-Kommentare, dh. <!-- -->werden nicht mehr benötigt. Sie sollten Browsern, die das <script>Tag nicht verstanden haben, ermöglichen, sich ordnungsgemäß zu verschlechtern. Diese Browser, z. Netscape 1.x kommt in freier Wildbahn nicht mehr vor. Es macht also wirklich keinen Sinn mehr, HTML-Kommentare in Ihre Skript-Tags einzufügen.

Wenn Sie möchten, dass Ihr HTML als XHTML oder XML validiert wird, möchten Sie wahrscheinlich ein auskommentiertes CDATA-Tag verwenden.


<script type="text/javascript">
//<![CDATA[
document.write("Hello World!");
//]]>
</script>

Der Grund dafür ist , damit Ihr <, >, &, "und 'dass ein Teil Ihres JavaScript - Code sind müssen nicht so codiert werden &lt;, &gt;, &amp;, &quot;und &apos;jeweils.

Asaph
quelle
3
Was tun Sie, wenn Sie ']]>' als Teil einer Zeichenfolge einfügen möchten?
Dreamlax
6
@dreamlax: Du musst es in Stücke zerbrechen. Menschen haben das gleiche Problem, mit </script>dem normalerweise in </scrund aufgeteilt wird ipt>.
Asaph
5
Tatsächlich kann es noch heute sinnvoll sein, HTML-Kommentare um js-Code zu verwenden. Googlebot crawlt alle in js Code gefundenen Zeichenfolgen, die "wie eine URL aussehen" (gemäß den Kriterien, die ich nicht kenne), als wäre es ein Link. Ich weiß, dass es total bescheiden ist, aber es tut es. In vielen Fällen haben Sie möglicherweise Zeichenfolgen, die wie URLs aussehen, aber keine gültigen URLs sind. Sie möchten also nicht, dass der Crawler von Google Ihren Server mit unsinnigen Anforderungen nervt. Ein Typ, der zu wissen scheint, was er sagt, stellt sicher, dass der Googlebot keine js-Zeichenfolgen mit URL-Look crawlt, wenn der js-Code in HTML-Kommentaren enthalten ist. goo.gl/ZRW1Y hat tho
matteo
2
@dreamlax ]]>]]<![CDATA[>
IllidanS4 unterstützt Monica
1
Wenn das Ziel darin besteht, HTML / XML-Validatoren zu überzeugen (heutzutage verstehen viele das <script>Zeug richtig), sehe ich keinen signifikanten Vorteil des CDATABlocks über dem traditionellen Kommentar. Der einzige Unterschied ist, ob der <script>offiziell Inhalt hat oder nicht - und in Bezug auf Suchmaschinen möchten wir vielleicht, dass er keinen Inhalt hat ...
BurninLeo
23

Nicht wirklich, es sei denn, Sie zielen auf 20 Jahre alte Browser ab.

Sasha Chedygov
quelle
6
Nein, Internet Explorer 2. Netscape hatte Javascript-Unterstützung von 2.0
MarkR
1
@ Kangax: Schlimmer noch - Netscape Navigator 2, wenn ich mich richtig erinnere.
Chuck
14

Es ist besser, JavaScript im gesamten Körper zu vermeiden. Dies erleichtert die Aktualisierung, vermeidet die Notwendigkeit von Kommentaren und zwingt Sie dazu, sowohl für Benutzer ohne JavaScript als auch für Benutzer mit aktiviertem JavaScript zu planen.

scragar
quelle
8
Manchmal .jsist es schwieriger , Ihr gesamtes Javascript in Dateien anstatt im HTML- Code zu haben, da die .jsDateien möglicherweise zwischengespeichert werden.
Asaph
11
Ich verknüpfe meine Javascript-Dateien aus einem Ordner, dessen Name die aktuelle Version meiner Webanwendung enthält.
Herzmeister
3
Eine weitere gängige Taktik vieler Websites und Frameworks, z. B. WordPress, besteht darin, dem URI der js-Datei eine Abfragezeichenfolge hinzuzufügen, um das Neuladen der Datei zu erzwingen, wenn sich die Abfragezeichenfolge ändert. zB:<script type="text/javascript" src="http://example.com/path/to/file.js?v1.0"></script>
Will B.
5

Nicht so wie du es machst, nein.

Das <! - wird in Javascript genauso behandelt wie //, daher sollte Ihr Code stattdessen so aussehen:

<script type="text/javascript">
<!--
document.write("Hello World!");
//-->
</script>

..der Unterschied zu Ihrem besteht darin, dass ein seltener, obskurer Browser, der das Skript-Tag möglicherweise nicht versteht, die Öffnung // auf dem Bildschirm druckt, was den Zweck, das Kommentar-Tag dort zu platzieren, zunichte macht.

Hier finden Sie weitere Informationen, wenn Sie neugierig sind: http://www.javascripter.net/faq/comments.htm

Letztendlich wissen jedoch auch sehr obskure Browser, die standardmäßig kein Javascript unterstützen (wie HTMLLayout Browse oder Netsurf), dass es am besten ist, den Text nicht zwischen Skript-Tags zu rendern. Nein, er ist in keiner Weise mehr relevant. Allerdings sollten alle Browser, die Sie interessieren könnten, die <! - Syntax verstehen, sodass Sie sich keine Sorgen machen müssen, sie aus dem zu entfernen, was Sie bereits haben, da es sich um gültige js handelt. Denken Sie daran, sie beim nächsten Mal nicht hinzuzufügen.

andwhyisit
quelle
0

Selbst in modernen Browsern kann dies nützlich sein. Ich bin heute tatsächlich auf dieses Problem gestoßen, gerade weil ich vermeiden wollte, dass Javascript in mein HTML eingebettet wird.

Ich habe eine HTML - Seite , die auf serviert wird http://host/variable_app_name/pagename, wo variable_app_nameviele Werte haben kann (y'know, Variable). Wenn es auf statische Dateien zugreifen möchte, muss es eine URL wie verwenden http://host/static/variable_app_name/filename, daher kann ich den Speicherort der statischen Datei nicht angeben, ohne zuerst den Speicherort des Browsers zu überprüfen, um den Wert von zu ermitteln variable_app_name.

Um auf die Haupt-Javascript-Datei zu verlinken, gehe ich wie folgt vor:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
</script>

Der obige Code wird auch in der neuesten Version von Chrome explodieren, da das Skript-Tag in der Mitte einer Javascript-Zeichenfolge beendet wird und der Rest der Zeichenfolge wie folgt als HTML interpretiert wird:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js">
</script>
\n');
</script>

Es gibt viele Möglichkeiten, dies zu beheben, aber ich verwende gerne einen HTML-Kommentar.

Mit HTML-Kommentar:

<script type="text/javascript" >
<!--
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
-->
</script>

Aufbrechen der Javascript-Zeichenfolge:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></scr'+'ipt>\n');
</script>

Erstellen und anhängen Sie das Skript-Tag, anstatt document.write zu verwenden:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   var script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = '/static/'+variable_app_name+'/pagename.js';
   document.head.appendChild(script);
</script>

Ich verwende gerne den HTML-Kommentar, da es sich um eine kurze Änderung handelt und nicht für jede verknüpfte Datei repliziert oder überlegt werden muss.

Jools
quelle