¿Está mal colocar la etiqueta <script> después de la etiqueta </body>? [duplicar]

Resuelto DanC asked hace 14 años • 10 respuestas

¿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>
DanC avatar Jun 14 '10 20:06 DanC
Aceptado

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>
Andy E avatar Jun 14 '2010 13:06 Andy E

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 deferatributo , podemos colocarlo scripten 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.

Quentin avatar Jun 14 '2010 13:06 Quentin

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;
    ...
Vitalii Fedorenko avatar Feb 15 '2012 14:02 Vitalii Fedorenko

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.

Bronx avatar Jul 24 '2013 22:07 Bronx