2010-10-12 12 views
12

algunos años, me enseñaron que los bloques de código JavaScript incrustado dentro de HTML siempre deben ser capsuladas dentro de los comentarios HTML de la siguiente manera:¿Debo usar comentarios HTML para encapsular los bloques de código JavaScript? Hace

<script type="text/javascript"> 
<!-- 
var hello = "world"; 
--> 
</script> 

me dijeron que hacer esto, pero nunca tipo de totalmente descubierto por qué. En cierto modo se parece hacky utilizar los comentarios HTML, por lo que hoy en día he empezado a utilizar escribir mi código JavaScript en el interior del bloque de script sin los comentarios HTML:

<script type="text/javascript"> 
var hello = "world"; 
</script> 

Así que mi pregunta es: ¿debo utilizar los comentarios HTML para encapsular el código JavaScript bloques? ¿Es seguro simplemente escribir el guión sin los comentarios? Quiero decir ¿arriesgar algo cuando dejo fuera las etiquetas de comentarios?

Respuesta

11

El comentario HTML estaba destinado a ocultar el JavaScript de navegadores antiguos que no entendían el elemento <script> y en su lugar mostraban su contenido en la página. Eso fue hace mucho tiempo a mediados de los 90, iirc. Hoy en día puede suponer con seguridad que los navegadores de esa época ya no están presentes en la web y omiten los comentarios.

Algunos bonita historia en que se pueden encontrar here:

La regla general con respecto a las etiquetas HTML que los navegadores no entienden es que el navegador debe ignorar la etiqueta por completo y tratar el contenido de la página, como si esa etiqueta no estaba allí. Esto significa que cuando Netscape 2 introdujo por primera vez JavaScript (o LiveScript como se llamaba entonces), fue necesario colocar un comentario HTML alrededor del script para ocultar el código de otros navegadores que no entendían el script y que por lo tanto, habría mostrado el código en lugar de ejecutarlo.

El lenguaje JavaScript se escribió específicamente para aceptar el inicio de un comentario HTML como el primer elemento del guión y para ignorarlo para que el comentario HTML se pueda utilizar para ocultar el guión a personas que usan Netscape 1, Mozaic , Internet Explorer 1, Internet Explorer 2 y otros navegadores de una cosecha similar, ninguno de los cuales nadie usa más. Son estos navegadores prehistóricos (en términos de JavaScript) los que se ven cuando se ven referencias en tutoriales de JavaScript anticuados para envolver su JavaScript dentro de un comentario HTML con el fin de ocultarlo de los navegadores "antiguos".

Con Internet Explorer 3, Microsoft presentó su propio equivalente a JavaScript que llaman JScript. Desde entonces, todos los navegadores han reconocido al menos la etiqueta de script y los navegadores más modernos (Netscape 2+, IE3 + etc.). Ya no se requiere el comentario HTML. Por eso, una vez que todos sus visitantes se actualizaron para usar Netscape 2, Internet Explorer 3 o navegador más reciente que cualquiera de los dos, el comentario de la secuencia de comandos se convierte en código redundante.

+0

¡Gracias! Esto también ha sido mi corazonada. No me he encontrado con un solo cliente que haya tenido problemas con una página con bloque de JavaScript sin comentarios. Además, ¿sabe por casualidad en qué navegadores específicos se produciría este comportamiento no deseado? – jsalonen

+0

@jsalonen: ver edición – Joey

+0

Por lo tanto, realmente es un requisito antiguo. Caso cerrado. ¡Gracias! – jsalonen

6

Directamente desde the source

18.3.2 de datos de secuencias de comandos que oculta de los agentes de usuario

los agentes de usuario que no reconozcan el elemento SCRIPT probablemente hará que el contenido de ese elemento como texto. Algunos motores de scripting, incluidos los de JavaScript, VBScript y Tcl, permiten que las declaraciones de script se incluyan en un comentario de SGML. Los agentes de usuario que no reconocen el elemento SCRIPT ignorarán el comentario, mientras que los motores de scripting inteligentes entenderán que el script en los comentarios se debe ejecutar.

Otra solución al problema es mantener los scripts en documentos externos y referirse a ellos con el atributo src.

Comentando scripts en JavaScript El motor de JavaScript permite que la cadena "<!--" que se producen en el inicio de un elemento SCRIPT, e ignora otros personajes hasta el final de la línea. JavaScript interpreta "//" como comenzando un comentario que se extiende hasta el final de la línea actual. Esto es necesario para ocultar la cadena "-->" del analizador de 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> 

Por otra parte, si realmente quiere entender lo que significa todo esto, lea este excellent article. Es largo, pero vale la pena.

+1

¿Puede especificar un poco más: qué tan real es este riesgo? ¿Conoces algunos navegadores específicos que se comportan así? – jsalonen

+0

Ningún navegador que admita una versión semi-reciente de HTML representará el contenido del elemento '

  • 11. ¿Debo siempre envolver mi código en intentar ... atrapar bloques?
  • 12. Javascript: ¿Qué hace este código?
  • 13. ¿Debo usar JSON o AJAX para los datos de respuesta?
  • 14. Bloques de código anónimo
  • 15. ¿Cómo usar los sockets en JavaScript \ HTML?
  • 16. ¿Debo usar Resharper para ordenar el código de otras personas?
  • 17. Bloques auto expandibles de comentarios en emacs
  • 18. Configure cobertura para ignorar ciertos bloques de código
  • 19. RegExp para eliminar comentarios HTML
  • 20. encapsular css
  • 21. ¿Debo usar polimorfismo en javascript?
  • 22. ¿Debo pasar o encapsular una conexión en un DAO?
  • 23. ¿Cuándo debo usar los bloques Begin/End y la palabra clave Go en SQL Server?
  • 24. Mejor código GWT Diseño dividido para encapsular "módulos"
  • 25. .Net Eliminar bloques de código javascript y css de la página html
  • 26. código javascript para resaltar un elemento html
  • 27. bloques de código perl
  • 28. ¿Cuándo debo anidar los bloques PL/SQL BEGIN ... END?
  • 29. ¿Se puede usar jquery para agregar comentarios dinámicamente al código?
  • 30. ¿Cuál es el propósito de los bloques de código solitario en Javascript?