À quel point est-il mal de placer la balise de script après la balise de fermeture du corps ( </body>
). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
À quel point est-il mal de placer la balise de script après la balise de fermeture du corps ( </body>
). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Réponses:
Il ne sera pas validé en dehors des balises <body>
ou <head>
. Cela ne fera pas non plus de différence - à moins que vous ne fassiez des manipulations DOM qui pourraient casser IE avant que l'élément de corps ne soit complètement chargé - pour le mettre juste avant la fermeture </body>
.
<html>
....
<body>
....
<script type="text/javascript" src="theJs.js"></script>
</body>
</html>
<script src="..." defer>
, qui fonctionne dans tous les principaux navigateurs (mais avec un bogue potentiellement cassant dans IE9 et inférieur).
Oui. Seuls les commentaires et la balise de fin de l'élément html sont autorisés après la balise de fin du corps.
Les navigateurs peuvent effectuer une récupération d'erreur, mais vous ne devez jamais en dépendre.
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 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;
...
IE ne permet plus cela (depuis la version 10, je crois) et ignorera ces scripts. FF et Chrome les tolèrent toujours, mais il y a des chances qu'un jour ils abandonnent cela comme non standard.
Insérez procéduralement le "script d'élément" après "le corps de l'élément" est "erreur d'analyse" par le processus recommandé par le W3C . Dans "Tree Construction", créez une erreur et exécutez "tokenize again" pour traiter ce contenu. C'est donc comme une étape supplémentaire. Ce n'est qu'alors que l'on peut exécuter "Script Execution" - voir processus de schéma .
Tout autre "erreur d'analyse". Basculez le "mode d'insertion" sur "dans le corps" et retraitez le jeton.
Techniquement, par navigateur, c'est un processus interne, comment ils le marquent et l'optimisent.
J'espère avoir aidé quelqu'un.
Oui. Mais si vous ajoutez le code à l'extérieur, ce ne sera probablement pas la fin du monde car la plupart des navigateurs le corrigeront, mais c'est toujours une mauvaise pratique d'y entrer.
Google le recommande en fait en ce qui concerne «l'optimisation CSS». Ils recommandent d'intégrer les styles critiques au-dessus du pli et de reporter le reste (fichier css).
Exemple:
<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>
Voir: https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery
body
élément. Cet article Google ne conseille à personne de faire une telle chose.
Les navigateurs modernes prendront des balises de script dans le corps comme suit:
<body>
<script src="scripts/main.js"></script>
</body>
Fondamentalement, cela signifie que le script sera chargé une fois la page terminée, ce qui peut être utile dans certains cas (notamment la manipulation DOM). Cependant, je vous recommande fortement de prendre le même script et de le mettre dans la balise head avec "defer", car cela donnera le même effet.
<head>
<script src="scripts/main.js" defer></script>
</head>
script
balises avaient un event
attribut qui pourrait être défini pour déterminer quand analyser le script. Vous devez donc event="load" event="DOMContentLoaded"
exécuter le script après la création du DOM ou event="beforeunload"
sur l' beforeunload
événement window . Exemple, <script src="scripts/main.js" event="DOMContentLoaded"></script>
.