2011-05-11 32 views
12

Duplicar posible:
Why don't self-closing script tags work?<script></script> o <script />?

acabo de encontrar un comportamiento weired con el guión etiqueta en HTML.

I servidor web es nginx, y utilicé FAST CGI y PHP5. Tengo un pagina.html, que se ve así:

<html> 
    <body> 
    <!-- <?php echo 'i am going to add php code here'; ?> --> 
    <script type="text/javascript" src="./my/javascript1.js" /> 
    <script type="text/javascript" src="./my/javascript2.js" /> 
    </body> 
</html> 

Si esta página se sirve directamente desde el servidor web, el java script funciona bien. Pero si pasó a PHP5, parece que solo se ejecuta la primera etiqueta del script java. Pero si cambio de la secuencia de comandos bloque en:

<script type="text/javascript" src="./my/javascript1.js"></script> 
    <script type="text/javascript" src="./my/javascript2.js"></script> 

Todo funciona de nuevo. ¿Notó cómo se cierran las etiquetas? Sí, es por eso que estoy preguntando aquí. ¿Cuál es la diferencia? Se supone que tienen la misma función/significado. Además, el HTML de salida que recibió mi navegador web (Chrome/IE9) es el mismo, pero ¿por qué se trata de manera diferente?

+2

¿Qué quiere decir con "si pasó a php5"? – Nanne

+3

Lectura adicional: http://stackoverflow.com/questions/69913/why-dont-self-closing-script-tags-work – JohnP

+0

@Nanne estableció un identificador en Nginx para que la página sea procesada por PHP5. – davidshen84

Respuesta

9

La etiqueta del script necesita una etiqueta de cierre separada para ser un código válido. Ver http://www.w3.org/TR/html401/interact/scripts.html#h-18.2.1

Algunos navegadores aceptan la etiqueta de cierre automático, otros no, y la versión HTML que está utilizando también afecta el resultado. No hay etiquetas de cierre automático a menos que use XHTML.

Pasar el archivo a través del motor de PHP no debería cambiar el resultado, pero es posible que intente corregir las etiquetas de script incorrectas. Debería ver la fuente en el navegador para ver si las etiquetas se han cambiado.

+0

desea probar esta opción: 'Si esta página se sirve directamente desde el servidor web, el script java funciona bien. ¿Pero si pasó a PHP5'? Supongo que quiere decir PHP vs HTML. – JohnP

4

etiqueta de secuencia de comandos es necesario tener una etiqueta de cierre, incluso si utiliza el atributo src. evitarlo causa comportamientos no deseados.

-1

Parece que su servidor está configurado para generar XHTML en lugar de HTML. HTML no tiene cosas tales como <tag />. Pero XML los tiene.

Compruebe la declaración del tipo de documento en ambos casos. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" y similares al principio de su documento.

-3

Eso es básicamente depende de su DocType mencionado en el HTML.

Si el DocType se menciona transitional XHTML entonces no permitiría la etiqueta script que se cierre como esto <script ... />. Solo permitiría que la etiqueta se cerrara así. <script ... ></script> y así sucesivamente.

Si el DocTYpe es algo distinto de XHTML, dependería de la compatibilidad del navegador en ese caso.

Como referencia, vea esto ...

http://www.w3schools.com/tags/tag_doctype.asp

+3

Eso no es correcto. La etiqueta de cierre siempre es obligatoria, independientemente de la versión HTML utilizada. – Guffa

+0

Lo que mencioné anteriormente es 100% correcto (aunque no libre), pero funciona con la mayoría de los navegadores (incluido IE 6) –

+1

Ningún navegador que conozco permite '

0

La forma en que el navegador interpreta el código HTML no tiene nada que ver con PHP, ya que no es un analizador de HTML. Algunos navegadores lo aceptan. otros no .... También verifique esto link. para más Q & A sobre el mismo tema