2012-10-27 4 views
12

Ein altes Idiom sehr alten Browser für den Erhalten Sie JavaScript Blöcke in HTML-Seiten zu ignorieren ist, den Inhalt des <script> Elements in HTML-Kommentaren zu setzen:HTML Eröffnungs-Kommentar ist gültig JavaScript?

<script> 
    <!-- 
     alert("Your browser supports JavaScript"); 
    //--> 
</script> 

Das Grundprinzip ist, dass alter JavaScriptless Browser als Text übertragen wird den Inhalt des Elements <script>, so dass der JavaScript in einen HTML-Kommentar eingefügt wird, macht der Browser nichts zu rendern.

Ein moderner Browser hingegen wird das Element <script> sehen und seinen Inhalt als JavaScript analysieren. Folglich müssen die Kommentare ein gültiges JavaScript sein. Der abschließende HTML-Kommentar (-->) wird vom JavaScript-Parser ignoriert, da ihm ein JavaScript-Zeilenkommentar vorangestellt ist (//).

Meine Frage ist, wie die Eröffnung HTML-Kommentar (<!--) nicht dazu führen, dass der JavaScript-Parser fehlschlagen? Ich habe von verschiedenen Leuten gehört, dass der öffnende HTML-Kommentar ein gültiges JavaScript ist. Wenn es stimmt, dass der Eröffnungskommentar als JavaScript ausgewertet wird, was macht er dann, wenn er ausgeführt wird?

+0

Es ist gültig, fügen Sie es einfach in Ihre Konsole ein. Ich wäre aber neugierig, warum. – kapa

+1

wenn es ausgeführt wird, gibt es undefined zurück und funktioniert wie ein normaler '//' Kommentar. sieht aus wie eine fest codierte Zauberschnur? neugierig, die tatsächliche Antwort auch zu wissen. – c69

+0

Nice spot :) Fängt an Line Kommentare wie folgt zu machen, nur um mit den Köpfen der Leute zu spielen: D – clentfort

Antwort

7

Es schien etwas aufregend, einen Ausdruck zu sein, die eine besondere Bedeutung haben könnte (<, ! und -- sind alle Betreiber in Javascript), aber ohne Operanden macht es keinen Sinn machen.

Turns out dass <!-- ist einfach äquivalent zu // in Javascript, es wird verwendet, um eine Zeile auskommentieren.

Es ist ein Sprachfeature, das jedoch nicht gut dokumentiert zu sein scheint und aus dem einfachen Grund hinzugefügt worden sein könnte, um diesen "Hack" zu unterstützen. Und jetzt müssen wir damit leben, die Rückwärtskompatibilität nicht zu brechen.

Es ist unnötig zu sagen, dass dies eine lustige Sache zu wissen ist, sollte diese Art der Kommentierung nicht in realen Code verwendet werden, die andere Leute zufällig zu lesen und zu arbeiten.

Der "Hack" ist auch veraltet, weil jetzt jeder Browser das <script> Tag versteht und seinen Inhalt nicht anzeigt (auch wenn Javascript ausgeschaltet ist). Persönlich versuche ich in den meisten Fällen, Javascript nicht direkt in HTML zu schreiben und lade immer mein Javascript als externe Ressource, um HTML und Javascript zu trennen.

+0

das ist cool, das wusste ich nicht! – Jim

3

In einer anderen Frage Stackoverflow, gab @MathiasBynens, was ich glaube ist die Antwort:

Why is the HTML comment open block valid JavaScript?

Kurz gesagt, es scheint, dies ist eine Nicht-Standard neben Browser-basierte JS Motoren das erlaubt diese <!-- und --> als einzeilige Kommentarmarkierungen wie die // in Standard-JS.

+0

Ich habe nicht bemerkt, dass der abschließende (HTML) Kommentar auch als JavaScript-Kommentar erkannt wird. Es überprüft (mit der JS-Konsole in Firefox), aber ich frage mich, warum Leute immer noch '// ->' verwenden. Vielleicht wird '->' erst kürzlich als JS-Kommentar interpretiert? – Daniel