¿Está mal colocar la etiqueta <script> después de la etiqueta </body>? [duplicar]
¿Qué tan incorrecto es colocar la etiqueta script después de la etiqueta de cierre del cuerpo ( </body>
)?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
No se validará fuera de las etiquetas <body>
o <head>
. Tampoco habrá mucha diferencia (a menos que esté haciendo manipulaciones DOM que podrían romper IE antes de que el elemento body esté completamente cargado) a colocarlo justo antes del cierre </body>
.
<html>
....
<body>
....
<script type="text/javascript" src="theJs.js"></script>
</body>
</html>
Sólo se permiten comentarios y la etiqueta final del elemento html después de la etiqueta final del cuerpo.
Puede confirmar esto con la especificación o un validador .
Los navegadores pueden realizar recuperación de errores y la especificación HTML incluso describe cómo recuperarse en esa situación, pero nunca debes depender de eso.
También vale la pena señalar que la razón habitual para colocar el elemento del script al final es garantizar que los elementos a los que el script puede intentar acceder a través del DOM existan antes de que se ejecute el script.
Con la llegada del defer
atributo , podemos colocarlo script
en el encabezado y seguir obteniendo ese beneficio y al mismo tiempo hacer que el navegador descargue el JS en paralelo con el HTML para un mejor rendimiento.
Como dijo Andy , el documento no será válido, pero aun así el guión será interpretado. Vea el fragmento de WebKit, por ejemplo:
void HTMLParser::processCloseTag(Token* t)
{
// Support for really broken HTML.
// we never close the body tag, since some stupid web pages close it before
// the actual end of the doc.
// let's rely on the end() call to close things.
if (t->tagName == htmlTag || t->tagName == bodyTag
|| t->tagName == commentAtom)
return;
...
Internet Explorer ya no permite esto (creo que desde la versión 10 ) e ignorará dichos scripts.
Firefox y Chrome todavía los toleran, pero hay posibilidades de que algún día los descarten como no estándar.