2012-10-27 12 views
12

Un vecchio linguaggio per ottenere molto vecchi browser di ignorare i blocchi JavaScript in pagine HTML è quello di avvolgere il contenuto dell'elemento <script> nei commenti HTML:HTML Opening-Comment è valido JavaScript?

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

La logica è che i vecchi browser JavaScriptless renderanno come testo il contenuto dell'elemento <script>, quindi inserire il codice JavaScript in un commento HTML fa sì che il browser non abbia nulla da mostrare.

Un browser moderno, d'altra parte, vedrà l'elemento <script> e analizzerà il suo contenuto come JavaScript. Di conseguenza, i commenti devono essere validi JavaScript. Il commento HTML di chiusura (-->) viene ignorato dal parser JavaScript perché è preceduto da un commento di riga JavaScript (//).

La mia domanda è, in che modo il apertura del commento HTML (<!--) non causa l'errore del parser JavaScript? Ho sentito da varie persone che il commento HTML di apertura è un JavaScript valido. Se è vero che il commento di apertura viene valutato come JavaScript, che cosa fa quando viene eseguito?

+0

È valido, è sufficiente inserirlo nella console. Sarei curioso di sapere perché, però. – kapa

+1

quando eseguito restituisce undefined e funziona come un normale commento '//'. sembra una stringa magica hardcoded? curioso di sapere anche la risposta vera. – c69

+0

Bel posto :) Comincerà a fare commenti di linea come questo d'ora in avanti solo per giocare con le menti delle persone: D – clentfort

risposta

7

sembrava essere qualcosa di eccitante, un'espressione che potrebbe avere un significato speciale (<, ! e -- sono tutti gli operatori in Javascript), ma senza operandi che non ha senso.

Turns out che <!-- è semplicemente equivalente a // in Javascript, è utilizzato per commentare una riga.

È una funzione di linguaggio che non sembra essere ben documentata e potrebbe essere stata aggiunta per il semplice motivo per supportare questo "hack". E ora dobbiamo conviverci per non rompere la compatibilità.

Inutile dire che, sebbene sia una cosa divertente da sapere, questo tipo di commenti non dovrebbe essere utilizzato in codice reale che altre persone potrebbero capitare di leggere e utilizzare.

Anche "hack" è obsoleto, perché ora ogni browser riconosce il tag <script> e non ne visualizza il contenuto (anche se Javascript è disattivato). Personalmente, nella maggior parte dei casi cerco di evitare di scrivere Javascript direttamente in HTML e caricare sempre il mio Javascript come risorsa esterna per separare HTML e Javascript.

+0

questo è fantastico, non lo sapevo! – Jim

3

In un'altra domanda StackOverflow, @MathiasBynens ha dato ciò che credo sia il risposta:

Why is the HTML comment open block valid JavaScript?

Insomma, a quanto pare, questo è un non-standard, oltre ai motori di JS basate su browser ciò consente a questi <!-- e --> di contrassegnare commenti a riga singola come lo // in JS standard.

+0

Non mi ero reso conto che anche il commento di chiusura (HTML) è stato riconosciuto come commento JavaScript. Esegue il check out (usando la console JS in Firefox), ma mi chiedo perché la gente usi ancora '// ->'. Forse '->' è interpretato solo di recente come commento JS? – Daniel