Os comentários HTML dentro das tags de script são uma prática recomendada? [fechadas]

97

A prática a seguir é bastante comum no JavaScript embutido com o qual tenho que trabalhar:

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

Eu sei que o objetivo é impedir que navegadores incompatíveis com JavaScript renderizem a fonte, mas isso ainda é uma prática recomendada hoje? A grande maioria dos navegadores usados ​​hoje pode interpretar JavaScript; mesmo os dispositivos móveis modernos geralmente não apresentam problemas.

Quanto ao 'por que não?' pergunta: Recentemente, passei várias horas depurando um problema em que alguém havia deixado o '//' antes de um '->' no final de uma tag de script enterrada profundamente em algumas páginas e isso estava causando um JavaScript misterioso erros.

O que você faz? Isso ainda é considerado uma 'prática recomendada?'

AndreiM
fonte

Respostas:

118

O importante é que hoje em dia, se um navegador específico suporta JavaScript ou não, é irrelevante (claramente a grande maioria o faz) - é irrelevante porque quase todos entendem os blocos de script, o que significa que sabem ignorar o JavaScript mesmo que não possam interpretar.

Matt Kruse dá uma explicação um pouco mais detalhada em seu site JavaScript Toolbox sobre o motivo específico de não usar comentários HTML em blocos de script.

Citado dessa página:


Não use comentários HTML em blocos de script

Nos dias antigos do javascript (1995), alguns navegadores como o Netscape 1.0 não tinham nenhum suporte ou conhecimento da tag de script. Portanto, quando o javascript foi lançado pela primeira vez, foi necessária uma técnica para ocultar o código de navegadores mais antigos para que eles não o mostrassem como texto na página. O 'hack' era usar comentários HTML dentro do bloco de script para ocultar o código.

Usar comentários HTML no script é ruim

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

Nenhum navegador em uso comum hoje ignora a tag <script>, portanto, ocultar o código-fonte javascript não é mais necessário. Na verdade, pode ser considerado prejudicial pelos seguintes motivos:

  • Nos documentos XHTML, a fonte ficará realmente oculta de todos os navegadores e tornada inútil
  • - não é permitido em comentários HTML, portanto, quaisquer operações de diminuição no script são inválidas
Noldorin
fonte
1
+1. Eu sabia que havia alguém que tinha muitas informações sobre este tópico dos meus dias de comp.lang.javascript, eu estava lendo arquivos de grupos de notícias quando sua resposta apareceu, citando Matt.
Grant Wagner
1
Em XHTML, você pode usar um CDATA em vez do comentário HTML: <script ...> // <! [CDATA [... //]]> </script>
Concrete Gannet
Devo acrescentar que este 'hack' produz um erro no Internet Explorer 9 (Um cliente reclamou sobre uma página que não estava funcionando corretamente e essa era a causa)
lordscales91
24

Eu parei de fazer isso. Em algum momento, você apenas precisa abrir mão do seu mosaico NCSA.

caos
fonte
7
Em outras palavras, não há nenhuma razão fornecida para que o OP pare de fazê-lo. Você está sugerindo que ele deveria parar de fazer isso porque você parou, o que não é uma razão boa o suficiente para ser uma resposta da IMO.
Lawrence Aiello,
1
@LawrenceAiello: E quanto à frase "melhores práticas" o faz pensar em "fatos" e não em "opiniões"?
caos,
5
bem aí está a falha final em todo este post. Deveria ter sido fechado porque é uma questão para discussão.
Lawrence Aiello,
1
Talvez quando isso foi postado seis anos atrás, isso se qualificou como uma resposta, mas pelos padrões do site hoje não.
j08691
1
Esta resposta está sendo discutida na Meta SO
CubeJockey,
10

De acordo com a recomendação do W3C , era principalmente útil ocultar os dados do script dos AGENTES DO USUÁRIO.

Citado na página W3c :

Comentando scripts em JavaScript O mecanismo JavaScript permite que a string "<!--"ocorra no início de um elemento SCRIPT e ignora outros caracteres até o final da linha. JavaScript interpreta "//" como o início de um comentário que se estende até o final da linha atual. Isso é necessário para ocultar a string "->" do analisador 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>
Webrsk
fonte
2
Se HTML 4.x estiver sendo usado. É uma história bem diferente com o XHTML.
Quentin
8

Não, é um resquício de uma solução alternativa usada quando o elemento de script foi introduzido pela primeira vez. Nenhum navegador falha em entender o elemento de script hoje (mesmo que o entenda como "Script que deve ser ignorado porque o script está desativado ou não é compatível").

Em XHTML, eles são ativamente prejudiciais.

Escrevi algo sobre a história disso há um tempo.

Quentin
fonte
3

Parei de usar isso há um tempo. Além disso, de acordo com Douglas Crockford , você pode eliminar o atributo type de suas tags de script, pois a única linguagem de script disponível na maioria dos navegadores é JavaScript.

Jake McGraw
fonte
1
A maioria dos navegadores ainda funcionará, mas viola a especificação HTML, então eu não o aconselharia.
Quentin
4
nunca se sabe quando o IE usará o script VB como tipo padrão.
Francis
1

Se você estiver digitando manualmente, sugiro que sempre use arquivos js externos, isso ajudaria muito.

Em relação à sua preocupação: a maioria dos navegadores são seguros para JavaScript hoje. No entanto, às vezes as pessoas podem escrever analisadores simples para buscar um HTML diretamente - e devo dizer, a citação segura é realmente útil para esses clientes. Além disso, alguns clientes não JS, como o antigo Lynx, obteriam benefícios com isso.

Francis
fonte
1

Se você não incluir texto literal entre as tags de script - isto é, se você carregar scripts de arquivos src, pode esquecer os comentários.

kennebec
fonte
0

Parei de fazer isso há muito tempo. Você realmente não precisa disso nos dias de hoje.

John Topley
fonte
@Yvette Qual é sua motivação para postar esse comentário seis anos depois de postar minha resposta?
John Topley,
@Yvette Sem ofensa, eu estava apenas curiosa. E é claro que você está certo; hoje em dia eu teria postado como um comentário.
John Topley,
-1

Não faço isso, mas outro dia fui validar meu site protegido por senha no w3c. Então eu tive que usar seu método de entrada direta. Ele reclamou do meu javascript, então coloquei os comentários de volta em tudo que estava bem.

JoshBerke
fonte