¿El uso de la etiqueta de comentario HTML <! - -> sigue siendo relevante para el código JavaScript?

80

¿Sigue siendo relevante utilizar etiquetas de comentarios HTML en el código JavaScript?

quiero decir

<html>
    <body>
        <script type="text/javascript">
            //<!--
            document.write("Hello World!");
            //-->
        </script>
    </body>
</html>
rajakvk
fuente
Tenga en cuenta el uso de JavaScript junto a los navegadores. También excluya los navegadores muy antiguos.
rajakvk

Respuestas:

108

Comentarios HTML, es decir. <!-- -->, ya no son necesarios. Su objetivo era permitir que los navegadores que no entendían la <script>etiqueta se degradaran con elegancia. Estos navegadores, por ejemplo. Netscape 1.x ya no se encuentra en estado salvaje. Así que ya no tiene sentido poner comentarios HTML en las etiquetas de su script.

Si desea que su HTML se valide como XHTML o XML, probablemente desee utilizar una etiqueta CDATA comentada.


<script type="text/javascript">
//<![CDATA[
document.write("Hello World!");
//]]>
</script>

La razón de esto es por lo que su <, >, &, "y 'que forman parte de su código JavaScript no tendrá que ser codificado como &lt;, &gt;, &amp;, &quot;y &apos;respectivamente.

Asaph
fuente
3
¿Qué haces cuando quieres incluir ']]>' como parte de una cadena?
dreamlax
6
@dreamlax: Tendrás que romperlo en pedazos. La gente tiene el mismo problema con el </script>que normalmente se divide en </scry ipt>.
Asaph
6
En realidad, puede tener sentido usar comentarios html alrededor del código js todavía hoy. El robot de Google rastreará cualquier cadena que se encuentre en el código js que "parezca una URL" (según los criterios de No sé qué) como si fuera un enlace. Sé que es totalmente demencial, pero lo hace. En muchos casos, puede tener cadenas que parecen URL pero no son URL válidas, por lo que no desea que el rastreador de Google moleste a su servidor con solicitudes sin sentido. Un tipo que parece saber lo que dice se asegura de que el robot de Google no rastree las cadenas js de look-like-url si el código js está incluido en comentarios html. goo.gl/ZRW1Y no lo he intentado aunque
matteo
2
@dreamlax ]]>]]<![CDATA[>
IllidanS4 apoya a Monica
1
Si el objetivo es convencer a los validadores de HTML / XML (hoy en día muchos entienden las <script>cosas correctamente), entonces no veo una ventaja significativa del CDATAbloque sobre el comentario tradicional. La única diferencia es si <script>oficialmente tiene contenido o no, y con respecto a los motores de búsqueda, es posible que deseemos que no tenga contenido ...
BurninLeo
23

Realmente no, a menos que esté apuntando a navegadores de 20 años.

Sasha Chedygov
fuente
6
No, Internet Explorer 2. Netscape tenía soporte Javascript desde 2.0
MarkR
1
@kangax: Peor que eso: Netscape Navigator 2 si no recuerdo mal.
Chuck
14

Es mejor simplemente evitar JavaScript en el cuerpo por completo. Facilita la actualización, evita la necesidad de comentarios y le obliga a planificar para usuarios que no tienen JavaScript habilitado, así como para usuarios con JavaScript habilitado.

scragar
fuente
8
A veces, tener todo su JavaScript en .jsarchivos en lugar de en HTML dificulta la actualización porque los .jsarchivos pueden almacenarse en caché.
Asaph
11
Vinculo mis archivos javascript desde una carpeta que tiene en su nombre la versión actual de mi aplicación web.
herzmeister
3
Otra táctica común de muchos sitios web y marcos, como wordpress, es agregar una cadena de consulta al URI del archivo js, ​​para forzar la recarga del archivo cuando cambia la cadena de consulta. por ejemplo:<script type="text/javascript" src="http://example.com/path/to/file.js?v1.0"></script>
Will B.
5

No de la forma en que lo estás haciendo, no.

El <! - se trata de la misma manera que // en javascript, por lo que su código debería verse así:

<script type="text/javascript">
<!--
document.write("Hello World!");
//-->
</script>

... la diferencia con el tuyo es que un navegador poco común que no entienda la etiqueta del script imprimirá la apertura // en la pantalla, lo que frustra el propósito de poner la etiqueta de comentario allí en primer lugar.

Aquí hay más información al respecto si tiene curiosidad: http://www.javascripter.net/faq/comments.htm

Sin embargo, al final, incluso los navegadores súper oscuros que no admiten javascript de forma predeterminada (como HTMLLayout Browser o Netsurf) saben que es mejor no representar el texto entre etiquetas de script, por lo que no, ya no es relevante de ninguna manera. Sin embargo, todos los navegadores que le interesen entienden la sintaxis <! -, por lo que no hay necesidad real de preocuparse locamente por eliminarlo de lo que ya tiene, porque es js válido, solo recuerde no agregarlo la próxima vez.

y por qué
fuente
0

Incluso en los navegadores modernos, puede resultar útil. De hecho, me encontré con este problema hoy, precisamente porque quería evitar tener javascript incrustado en mi html.

Tengo una página html que se sirve en http://host/variable_app_name/pagename, donde variable_app_namepuede tener muchos valores (ya sabes, variable). Si quiere acceder a archivos estáticos, tiene que usar una URL como http://host/static/variable_app_name/filename, por lo que no puedo especificar la ubicación del archivo estático sin mirar primero la ubicación del navegador para encontrar el valor devariable_app_name .

Para vincular al archivo javascript principal, hago lo siguiente:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
</script>

El código anterior explotará incluso en la última versión de Chrome, porque la etiqueta del script terminará en medio de una cadena de JavaScript y el resto de la cadena se interpretará como html, así:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js">
</script>
\n');
</script>

Hay muchas formas de solucionar este problema, pero me gusta usar un comentario html.

Con comentario html:

<script type="text/javascript" >
<!--
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
-->
</script>

Rompiendo la cadena javascript:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></scr'+'ipt>\n');
</script>

Cree y agregue la etiqueta de secuencia de comandos en lugar de usar document.write:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   var script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = '/static/'+variable_app_name+'/pagename.js';
   document.head.appendChild(script);
</script>

Me gusta usar el comentario html porque es un cambio conciso y no será necesario replicarlo o pensarlo en cada archivo vinculado.

Jools
fuente