52 votes

La balise <script ne peut-elle pas être auto fermée ?

J'avais ce code dans mon site web

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"/>
<script type='text/javascript' src='/lib/player/swfobject.js'></script>

swfobject ne fonctionnait pas (non chargé).

Après avoir modifié le code pour :

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
<script type='text/javascript' src='/lib/player/swfobject.js'></script>

Cela a bien fonctionné.

Le document a été analysé en tant que HTML5.

Je pense que c'est drôle. Ok, il est vrai qu'une balise qui est fermée et une balise qui se ferme automatiquement ne sont pas les mêmes. Je comprendrais donc que jQuery ne puisse pas se charger (bien que je trouve cela ridicule).

Mais ce que je ne comprends pas, c'est que jQuery se charge mais que la balise suivante, correctement écrite, ne se charge pas ?

55voto

MainMa Points 10849

En HTML, il existe des balises qui sont toujours auto-fermées. Par exemple, <hr>Some content here</hr> n'a aucun sens. De la même manière, il existe des balises qui ne peuvent pas être fermées automatiquement. <script> est l'un d'entre eux.

Je ne suis pas sûr de la raison pour laquelle il n'y a pas de fermeture automatique. <script> mais la raison pourrait venir du fait que la balise était destinée à toujours contenir du code à l'intérieur. Encore une fois, je ne suis pas sûr.

25voto

Quentin Points 325526

Parce qu'il est interprété comme :

Ligne 1 : Balise de début pour script.

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"/>

Ligne 2 : JavaScript (vraiment du JavaScript cassé !) à exécuter si le script externe mentionné à la ligne 1 ne parvient pas à se charger.

    <script type='text/javascript' src='/lib/player/swfobject.js'>

Ligne 3 : Balise de fin pour le script commencé à la ligne 1.

</script>

Ok, il est vrai qu'une balise fermée et une balise auto-fermante ne sont pas les mêmes.

Ils sont identiques (s'il n'y a pas de contenu), mais uniquement dans les documents XML. Un document XHTML servi comme application/xhtml+xml est un document XML. Dans un document HTML, grâce à un héritage de mises en œuvre incorrectes par les navigateurs, une balise auto-fermante n'est qu'une balise de début (et n'est donc acceptable que si la balise de fin est interdite).

22voto

Chuck Points 138930

La réponse de David Dorward explique cela sous un angle, mais il y a une raison plus profonde pour laquelle vous ne pouvez pas le faire :

Une barre oblique à la fin d'une balise ne la rend pas auto-fermante en HTML.

La syntaxe auto-fermante fait partie du XML. Dans un document HTML normal, elle n'a aucune signification.

3voto

stealthyninja Points 7911

@Joe Hopfgartner : Avez-vous modifié le code pour tester si

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js" />
<script type="text/javascript" src="/lib/player/swfobject.js" />

fonctionne ? ;-)

Mise à jour :

Exécutez le code et le <p> est caché, donc... on dirait que ça marche ?

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>questions/4531772</title>

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"/>
<script type="text/javascript" src="4531772.js"/>
</head>

<body>

<p class="test">Testing...</p>

</body>
</html>

JavaScript (4531772.js)

$(document).ready(function() {
    $('.test').hide();
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X