2010-11-30 24 views
32

Hace algún tiempo que tengo esta pregunta preocupada por lo curioso de mi mente y pensé en pedirle a su experiencia colectiva una respuesta a esta pregunta.¿<script> no está en <head> ok?

Para elaborar el título, decir que tengo esto:

 
alert("Some JS outside "); 

Fuera de las etiquetas <head></head> de mi archivo HTML. Mi pregunta es si está bien hacer esto o no, y cuánto se usa así.

Mi instinto me dice que está bien - Creo que los navegadores se ven a través de todo el HTML para <script> etiquetas e interpretarlo cuando lo ven, por lo que deben estar bien, pero no estoy tan grande con el funcionamiento de los navegadores.

Estoy buscando una respuesta definitiva (o lo más cercana posible a la definitiva) aquí - ¿está bien hacerlo, o no?

EDITAR: Para guardarme publicando esto un montón de veces, lo diré una vez aquí. Muchas gracias por toda su gente de entrada. Votos a todos ustedes! Tendré que volver a entrenarme para poner a JS en la parte inferior de las páginas, ahora que lo pienso es obvio que las secuencias de comandos en el inferior de la página son mucho mejores que las superiores. Gracias por su ayuda a todos.

Respuesta

23

El mejor lugar para las etiquetas de secuencia de comandos es antes de la etiqueta de cierre del cuerpo.

<html> 
     <head> 
     <title>Example</title> 
     </head> 
     <body> 
      Your Content 
     <script type="text/javascript" src="yourScriptHere.js"></script> 
     <script type="text/javascript">//Inline scripts etc.</script> 
     </body> 
</html> 

Dicho pueden ser otros lugares sin ningún problema sin embargo, la razón por la que los quiere al final es que usted quiere asegurarse de que la página ha cargado antes de la ejecución y también no quieren detener el progreso de descarga del cliente de hacer ellos esperan en grandes scripts.

+7

Tengo que estar en desacuerdo. Al colocar las secuencias de comandos al final, se ejecutan solo después de que la página se haya cargado. Eso es una porquería cuando esos scripts son responsables de establecer los enfoques en un elemento del formulario, por ejemplo, porque cuando las personas comienzan a escribir en un formulario de antemano, el script reiniciará el enfoque que es molesto. – user562374

+0

Existen muchas razones diferentes para colocar sus scripts. Los prefiero al final porque quiero que la página completa esté disponible para ejecutar mis scripts. Es completamente posible que su script se cargue y ejecute (si está en la parte superior) antes de que su campo de entrada esté disponible para enfocarse. Sin embargo, no podría estar más de acuerdo con usted sobre la molestia del retraso y tener un +1 por ese motivo: D –

+3

¿No es esto para lo que es la propiedad del cuerpo en carga? – Ponkadoodle

11

Sí. Está bien. De hecho, muy a menudo es necesario. En muchos casos, puede tener un javascript de carga larga (leer: gran descarga) que no es crítico para la página, por lo que desea que el resto del contenido de la página se cargue primero, por lo que pone el <script> para ese javascript en la parte inferior de la sección <body>.

12

Sí, <script> bloques fuera del <head> están bien.

De hecho, muchos recomiendan colocarlos al final de <body>. Poniéndolos justo antes de </body>, difiere la búsqueda/carga hasta después del contenido de la página ... para acelerar el renderizado.

From the W3C HTML4 spec:

El elemento SCRIPT coloca un script dentro de un documento. Este elemento puede aparecer varias veces en HEAD o BODY de un documento HTML.

2

Se ejecutará una secuencia de comandos en el cuerpo de su documento cuando se encuentre. Si se trata de una función, entonces "ejecutarla" simplemente significa definir la función, es decir, agregarla a la lista de funciones conocidas. Pero si no es una función, si es un bloque de declaraciones independientes, se ejecutarán donde se encuentren.

Por ejemplo, si escribió:

<html><head>... whatever ...</head> 
<p>Foo 
<script> 
document.write("bar") 
</script> 
<p>Plugh 
</html> 

El navegador mostrará:

Foobar 
Plugh 

Esto puede o no puede ser lo que quiera.