2010-06-14 25 views

Respuesta

153

No lo hará validate fuera de las <body> o <head> etiquetas. Tampoco hará mucha diferencia — a menos que esté haciendo manipulaciones de DOM que podrían break IE antes de que el elemento del cuerpo esté completamente cargado — hasta ponerlo justo antes del cierre </body>.

<html> 
    .... 
    <body> 
    .... 
    <script type="text/javascript" src="theJs.js"></script> 
    </body> 
</html> 
+0

Tenga en cuenta que las aplicaciones como YSlow realmente sugieren que incluya su javascript al final de la página. Puede que no acelere el tiempo de carga general, pero puede cargar primero el contenido relevante. Aún así, ponerlo solo dentro de la etiqueta es lo mejor. –

+10

@epalla: si coloca el script justo al final de la etiqueta del cuerpo, no queda otro contenido para cargar cuando llegue allí, por lo que debe haber poca diferencia entre colocarlo afuera o solo adentro. Luego tiene el beneficio adicional de que su página sigue validando, que fue el punto que estaba tratando de hacer en mi respuesta. –

+1

Sí, estuve de acuerdo contigo ya que tu respuesta es buena. Solo quería agregar que hay una razón para poner JS en la parte inferior de la página en vez de en la cabeza, como lo hemos hecho durante mucho tiempo. –

69

Sí. Solo se permiten los comentarios y la etiqueta final para el elemento html después de la etiqueta final para el cuerpo.

Los navegadores pueden realizar la recuperación de errores, pero nunca debe depender de eso.

+8

Esta es una mejor respuesta. Hay muchos navegadores nuevos por ahí con el móvil entrando en juego para arriesgarse a hacerlo mal cuando todo lo que tiene que hacer es cortar y pegar una sola etiqueta de cierre. –

0

Sí. Pero si agrega el código fuera, probablemente no será el fin del mundo, ya que la mayoría de los navegadores lo arreglarán, pero aún así es una mala práctica entrar.

28

Como Andy dijo que el documento no será válido, pero sin embargo, la secuencia de comandos todavía se interpretará. Ver el snippet 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; 
    ... 
+9

"Soporte para html realmente roto". - Creo que lo dice todo. –

8

IE no permite esto más (desde la versión 10, creo) e ignorará este tipo de scripts. FF y Chrome aún los toleran, pero hay posibilidades de que algún día lo omitan como no estándar.

+1

Y, sin embargo, Google lo hace en su ejemplo de cómo hacer el inicio de sesión de G +, con "última actualización 10 de abril de 2014". Lo obtuve de la versión para Java en el servidor (https://developers.google.com/+/quickstart/java) pero, presumiblemente, es el mismo HTML + js para todos. – Tom

1

Google realmente recomienda esto con respecto a 'CSS Optimization'. Recomiendan alinear los estilos críticos de pliegue arriba y diferir el resto (archivo css).

Ejemplo:

<html> 
    <head> 
    <style> 
     .blue{color:blue;} 
    </style> 
    </head> 
    <body> 
    <div class="blue"> 
     Hello, world! 
    </div> 
    </body> 
</html> 
<noscript><link rel="stylesheet" href="small.css"></noscript> 

Ver: https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery

+7

Se supone que no debes poner cosas fuera del elemento 'body'. Ese artículo de Google no aconseja a nadie que haga tal cosa. – ChaseMoskal

+1

Tengo miedo de que la página de google diga en realidad exactamente eso. – 10us

+2

Parece que en un momento, esa página * sí * recomendaba tal cosa, pero ya no. (Ahora hay una carga dinámica con javascript.) La versión alemana no está actualizada y aún contiene el ejemplo de código anterior. – bodo

Cuestiones relacionadas