257 votes

Est-il incorrect de placer la balise <script> après la balise </body>?

À quel point est-ce mal de placer la balise script après la balise de fermeture du body () ?

  ....

     ....

1 votes

Y a-t-il un support pour cela dans les navigateurs modernes.

0 votes

0 votes

Ce n'est pas faux. Cela déclenchera une alarme sur les validateurs, mais cela fonctionnera sur la plupart des navigateurs. Ce n'est pas faux, mais ce n'est pas valide.

218voto

Andy E Points 132925

Il ne sera pas valider en dehors des balises ou . Cela ne fera pas beaucoup de différence — sauf si vous avez des manipulations DOM qui pourraient casser IE avant que l'élément body soit entièrement chargé — de le mettre juste avant la fermeture .

  ....

     ....

0 votes

Notez que des applications comme YSlow suggéreront en fait que vous incluiez votre javascript à la fin de la page. Cela peut ne pas accélérer le temps de chargement global mais cela peut charger d'abord le contenu pertinent. Néanmoins, le placer juste à l'intérieur de la balise est préférable.

15 votes

@epalla: si vous placez le script juste à la fin de la balise body, il ne reste plus aucun autre contenu à charger d'ici là, donc il devrait y avoir peu de différence entre le placer à l'extérieur ou juste à l'intérieur. Vous avez ensuite l'avantage supplémentaire que votre page continue à être valide, c'était le point que j'essayais de faire dans ma réponse.

1 votes

Oui, je suis d'accord avec vous car votre réponse est bonne. Je voulais simplement ajouter qu'il y a une raison de placer JS en bas de la page au lieu de dans l'en-tête comme nous l'avons fait depuis longtemps.

117voto

Quentin Points 325526

Seuls les commentaires et la balise de fin de l'élément html sont autorisés après la balise de fin du body.

Vous pouvez confirmer cela avec la spécification ou un validateur.

Les navigateurs peuvent effectuer une récupération d'erreur, et la spécification HTML décrit même comment récupérer dans cette situation, mais vous ne devriez jamais en dépendre.


Il convient également de noter que la raison habituelle de placer l'élément script à la fin est de garantir que les éléments auxquels le script pourrait essayer d'accéder via le DOM existent avant l'exécution du script.

Avec l'arrivée de l' defer attribut, nous pouvons placer le script dans la head et obtenir toujours cet avantage tout en permettant également au JS d'être téléchargé par le navigateur en parallèle avec l'HTML pour de meilleures performances.

16 votes

Ceci est une meilleure réponse. Il y a trop de nouveaux navigateurs avec l'arrivée des mobiles pour risquer de le faire incorrectement quand tout ce que vous avez à faire est de couper et coller une seule balise de fermeture.

3 votes

Notez que defer ne s'applique que aux fichiers de script externes (c'est-à-dire que vous devez également spécifier l'attribut src). Vous ne pouvez pas "déférer" un élément </code> qui contient du script.</x-turndown>

35voto

Vitalii Fedorenko Points 17469

Comme l'a dit Andy, le document ne sera pas valide, mais néanmoins le script sera toujours interprété. Voir l'extrait de WebKit par exemple:

void HTMLParser::processCloseTag(Token* t)
{
    // Support pour un HTML vraiment cassé.
    // nous ne fermons jamais la balise body, car certaines pages web stupides la ferment avant
    // la fin réelle du doc.
    // comptons sur l'appel de end() pour fermer les choses.
    if (t->tagName == htmlTag || t->tagName == bodyTag
                              || t->tagName == commentAtom)
        return;
    ...

13 votes

"Support pour du HTML vraiment cassé." -- Je pense que cela résume tout.

9voto

Bronx Points 164

Internet Explorer ne le permet plus (depuis la version 10, je crois) et ignorera de tels scripts.

Firefox et Chrome les tolèrent encore, mais il est possible qu'un jour ils abandonnent cette fonctionnalité jugée non standard.

1 votes

Et pourtant, Google le fait dans leur exemple de comment faire la connexion G+, avec "dernière mise à jour le 10 avril 2014". Je l'ai trouvé dans la version pour Java sur le serveur (developers.google.com/+/quickstart/java) mais apparemment c'est le même HTML+js pour tous.

1voto

Taylor Satula Points 399

Oui. Mais si vous ajoutez le code à l'extérieur, il est peu probable que ce soit la fin du monde puisque la plupart des navigateurs le corrigeront, mais c'est quand même une mauvaise pratique à éviter.

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