I commenti HTML all'interno dei tag di script sono una best practice? [chiuso]


97

La seguente pratica è abbastanza comune nel JavaScript inline con cui devo lavorare:

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

So che il punto è impedire ai browser incompatibili con JavaScript di eseguire il rendering dei sorgenti, ma questa è ancora una best practice oggi? La stragrande maggioranza dei browser utilizzati oggi può interpretare JavaScript; anche i dispositivi mobili moderni di solito non hanno problemi.

Per quanto riguarda il "perché no?" domanda: di recente ho dovuto dedicare diverse ore al debug di un problema in cui qualcuno aveva omesso il "//" davanti a un "->" alla fine di un tag di script nascosto in profondità in alcune pagine e questo causava JavaScript misterioso errori.

cosa fai? È ancora considerata una "best practice?"


Risposte:


118

La cosa importante è che oggigiorno, se un particolare browser supporta JavaScript o meno è irrilevante (chiaramente la grande maggioranza lo fa) - è irrilevante perché quasi tutti comprendono i blocchi di script, il che significa che sanno di ignorare JavaScript anche se non possono interpretalo.

Matt Kruse fornisce una spiegazione leggermente più dettagliata sul suo sito JavaScript Toolbox del motivo per cui non utilizzare specificamente commenti HTML all'interno di blocchi di script.

Citato da quella pagina:


Non utilizzare commenti HTML nei blocchi di script

Ai tempi antichi di javascript (1995), alcuni browser come Netscape 1.0 non avevano alcun supporto o conoscenza del tag script. Quindi, quando javascript è stato rilasciato per la prima volta, era necessaria una tecnica per nascondere il codice dai browser meno recenti in modo che non lo mostrassero come testo nella pagina. Il "trucco" consisteva nell'usare commenti HTML all'interno del blocco di script per nascondere il codice.

L'uso di commenti HTML nello script è dannoso

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

Nessun browser di uso comune oggi ignora il tag <script>, quindi non è più necessario nascondere il sorgente javascript. Infatti può essere considerato dannoso per i seguenti motivi:

  • All'interno dei documenti XHTML, il sorgente sarà effettivamente nascosto a tutti i browser e reso inutilizzabile
  • - non è consentito all'interno dei commenti HTML, quindi qualsiasi operazione di decremento nello script non è valida

1
+1. Sapevo che c'era qualcuno che aveva molte informazioni su questo argomento dai miei giorni di comp.lang.javascript, stavo esaminando gli archivi dei news group quando è apparsa la tua risposta, citando Matt.
Grant Wagner

1
In XHTML, potresti usare un CDATA invece del commento HTML: <script ...> // <! [CDATA [... //]]> </script>
Concrete Gannet

Devo aggiungere che questo "hack" produce un errore in Internet Explorer 9 (un client si è lamentato di una pagina che non funzionava correttamente e questa era la causa)
lordscales91

24

Ho smesso di farlo. Ad un certo punto devi solo lasciare andare il tuo NCSA Mosaic.


7
In altre parole, non viene fornita alcuna ragione per spiegare perché l'OP dovrebbe smettere di farlo. Stai suggerendo che dovrebbe smettere di farlo perché l'hai fatto, il che non è un motivo sufficiente per essere una risposta IMO.
Lawrence Aiello

1
@ LawrenceAiello: E la frase "best practice" ti fa pensare a "fatti" e non a "opinioni"?
caos

5
bene, qui sta la colpa finale di questo intero post. Avrebbe dovuto essere chiuso perché è una questione di discussione.
Lawrence Aiello

1
Forse quando questo è stato pubblicato sei anni fa questa si qualificava come una risposta, tuttavia per gli standard del sito oggi non lo è.
j08691

1
Questa risposta è in discussione su Meta SO
CubeJockey

10

Come da Raccomandazione W3C, è stato principalmente utile nascondere i dati dello script agli AGENTI UTENTI.

Citato dalla pagina W3c :

Inserimento di commenti negli script in JavaScript Il motore JavaScript consente alla stringa "<!--"di ricorrere all'inizio di un elemento SCRIPT e ignora ulteriori caratteri fino alla fine della riga. JavaScript interpreta "//" come l'inizio di un commento che si estende fino alla fine della riga corrente. Ciò è necessario per nascondere la stringa "->" dal parser JavaScript.

    <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>

2
Se viene utilizzato HTML 4.x. È una storia completamente diversa con XHTML.
Quentin

8

No, è una sbornia da una soluzione alternativa utilizzata quando l'elemento script è stato introdotto per la prima volta. Nessun browser non riesce a capire l'elemento dello script oggi (anche se lo interpreta come "Script che dovrebbe essere ignorato perché lo scripting è disattivato o non supportato").

In XHTML, sono attivamente dannosi.

Qualche tempo fa ho scritto qualcosa sulla sua storia .


3

Ho smesso di usarlo un po 'di tempo fa. Inoltre, secondo Douglas Crockford , puoi eliminare l'attributo type dai tag di script poiché l'unico linguaggio di scripting disponibile nella maggior parte dei browser è JavaScript.


1
La maggior parte dei browser continuerà a funzionare, tuttavia viola le specifiche HTML, quindi non lo consiglierei.
Quentin

4
non sai mai quando IE prenderà lo script VB come tipo predefinito ..
Francis

1

Se stai digitando manualmente, ti suggerisco di usare sempre file js esterni, che aiuterebbero molto.

Per quanto riguarda la tua preoccupazione: la maggior parte dei browser oggi è sicura per JavaScript. Tuttavia a volte le persone possono scrivere semplici parser per recuperare direttamente un HTML - e devo dire che la citazione sicura è davvero utile per quei clienti. Anche alcuni client non JS come il vecchio Lynx ne trarrebbero vantaggio.


1

Se non includi testo letterale tra i tag di script, ovvero se carichi script da file src, puoi dimenticarti dei commenti.



0

Ho smesso di farlo secoli fa. Non ne hai davvero bisogno al giorno d'oggi.


@Yvette Qual è la tua motivazione per pubblicare quel commento sei anni dopo aver pubblicato la mia risposta?
John Topley

@Yvette Senza offesa, ero solo curioso. E ovviamente hai ragione; al giorno d'oggi l'avrei postato come commento.
John Topley

-1

Non lo faccio ma l'altro giorno sono andato a validare il mio sito protetto da password su w3c. Quindi ho dovuto usare il loro metodo di input diretto. Si è lamentato del mio javascript, quindi ho rimesso i commenti in tutto andava bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.