86 votes

Est-ce une mauvaise pratique d'intégrer du JavaScript dans le corps du HTML ?

Une équipe sur laquelle je travaille a pris l'habitude d'utiliser <script> à des endroits aléatoires du corps de nos pages HTML. Par exemple :

<html>
    <head></head>
    <body>
        <div id="some-div">
            <script type="text/javascript">//some javascript here</script>
        </div>
    </body>
</html>

Je n'avais pas vu ça avant. Cela semble fonctionner dans les quelques navigateurs que j'ai testés. Mais pour autant que je sache, il n'est pas valide de mettre des balises script dans des endroits comme celui-ci.

Ai-je tort ? Est-ce grave de mettre des balises script dans des balises div comme ça ? Y a-t-il des problèmes de compatibilité avec les navigateurs dont je dois être conscient ?

1 votes

Est-ce qu'il fait document.writes ou n'y a-t-il pas de raison particulière pour qu'il soit là où il est ?

9 votes

Script sont légaux pour se produire n'importe où dans le corps. Il n'y a rien de mal à cela. Cela a ses implications (timing, maintenabilité, mélange de code et de mise en page, préférence personnelle), mais autrement c'est correct.

0 votes

@earlz - voir ma réponse pour savoir pourquoi c'est mauvais. j'essaie juste de sauver une vie ici. et j'ai raison.

91voto

bobince Points 270740

C'est parfaitement valable.

Il n'est pas souhaitable d'insérer de gros blocs de code dans les balises (il est préférable d'utiliser des scripts externes), mais cela peut être utile :

  • ajouter des informations de liaison supplémentaires pour l'amélioration progressive (lorsque ces données sont difficiles à intégrer dans un nom de classe ou une autre approche visant à dissimuler des informations étendues dans des attributs) ; ou

  • lorsqu'il est nécessaire de lancer une amélioration scriptée aussi rapidement que possible (plutôt que d'attendre le chargement de la fenêtre/le document prêt). Un exemple de ceci serait l'autofocus, qui peut être irritant s'il est lancé trop tard.

Vous pensez peut-être à <style> qui ne sont pas autorisés dans les éléments <body> (bien que la plupart des navigateurs l'autorisent néanmoins).

12 votes

+1 pour l'autofocus ; parfois je suis sur une connexion lente et ce n'est pas drôle d'être déjà ailleurs (dans le pire des cas : taper un mot de passe) quand on est renvoyé au premier champ.

2 votes

Toutefois, l'intégration de JS peut être utile lorsqu'il n'y a qu'une seule page et pour réduire les consultations du serveur. Il en va de même pour les CSS intégrés. Mais normalement, il est préférable de séparer le code javascript et css dans des fichiers séparés pour réduire le temps de chargement des pages (avec l'utilisation d'un en-tête de cache valide) lors de l'utilisation d'un modèle avec les mêmes exigences javascript et css.

16voto

Keltex Points 17151

En fait, c'est assez courant. Par exemple Code de suivi analytique de Google utilise justement cette syntaxe :

<script type="text/javascript">
  var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
  document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>

Si c'est assez bon pour Google...

40 votes

-1 - ce n'est pas parce que Google le fait que c'est une bonne pratique. Commun != bon.

4 votes

Google Analytics est de toute façon trop compliqué et l'utilisation de JavaScript pour le suivi est en fait un bon exemple de suringénierie.

0 votes

Également, ils recommandent de mettre le script en bas de la page, et non au milieu, qui est l'endroit où les script devraient être placés si vous devez les placer. PAS dans l'en-tête où les gens les placent habituellement.

5voto

François Points 17557

Très bien pour le code spaghetti !

4voto

Pointy Points 172438

Elle est valable et, en fonction de votre cadre côté serveur et de la nature du code, parfois très difficile à éviter.

3voto

meo Points 10534

C'est valable !

Vous pouvez utiliser :

<script type="text/javascript">
    //<![CDATA[

    // Some JavaScript code that perfectly validates in the W3C validator

    //]]>
</script>

Je ne pense pas que vous puissiez dire si c'est une mauvaise pratique en général. Il faut le dire dans chaque cas. Mais ce qui est sûr, c'est qu'il est bon d'avoir tout votre code JavaScript au même endroit. C'est un peu désordonné si vous avez des petits morceaux de code JavaScript partout dans votre fichier HTML.

2 votes

C'est une mauvaise pratique en général.

0 votes

Ok, je viens de lire ton message, c'est bon à savoir. Je ne le fais jamais de toute façon, mais je n'ai jamais pensé que ça pouvait faire pendre votre navigateur... ...comment ça se fait ?

1 votes

Tout JavaScript peut bloquer votre navigateur (il m'arrive encore d'avoir ces boîtes d'alerte dans Firefox avec une option 'Abandonner script' et une option 'Continuer script').

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