43 votes

Comment l'emplacement d'une balise de script dans une page affecte-t-il une fonction JavaScript qui y est définie?

J'ai lu que vous devriez définir vos fonctions JavaScript dans la balise <head> , mais comment se situe l'emplacement du <script> (que ce soit dans le <head> , <body> , ou toute autre balise) affecte une fonction JavaScript.

En particulier, en quoi cela affecte-t-il l'étendue de la fonction et d'où vous pouvez l'appeler?

26voto

Simon_Weaver Points 31141

Dire aux gens d'ajouter <SCRIPT> seulement dans la tête des sons comme une chose raisonnable à faire, mais comme d'autres l'ont dit, il ya beaucoup de raisons pour lesquelles cela n'est pas recommandé ou même pratiques, principalement de la vitesse et de la façon dont les pages HTML sont générées dynamiquement.

C'est ce que la spécification HTML 4 dit :

L'élément SCRIPT lieux d'un script au sein d'un document. Cet élément peut apparaissent un certain nombre de fois dans la TÊTE ou le CORPS d'un document HTML.

Et un exemple de code HTML. N'est-il pas l'air joli tout formaté ici :)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>A document with SCRIPT</TITLE>
<META http-equiv="Content-Script-Type" content="text/tcl">
<SCRIPT type="text/vbscript" src="http://someplace.com/progs/vbcalc">
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT type="text/javascript">
...some JavaScript...
</SCRIPT>
</BODY>
</HTML>

Et quelque chose à la hâte en HTML 5 :

Nouvel attribut async en <SCRIPT> :

Remarque: Il existe des moyens [sic] un script peut être exécuté:

L'attribut async est "vrai": L' le script sera exécuté asynchrously avec le reste de la page, de sorte que le le script sera exécuté lorsque la page continue le traitement.

L'attribut async est "faux", mais l'attribut defer est "vrai": L' le script sera exécuté lorsque la page est fini avec l'analyse syntaxique.

19voto

James Points 56229

Les règles normales de jouer encore debout; ne pas utiliser de trucs avant de elle est définie. :)

Aussi, prenez note que le " tout mettre à bas l'avis n'est pas la seule règle dans le livre - dans certains cas, il peut ne pas être possible, et dans d'autres cas, il peut faire plus de sens de mettre le script d'ailleurs.

La principale raison pour mettre un script en bas d'un document est pour la performance, scripts, contrairement à d'autres requêtes HTTP, de ne pas charger en parallèle, ce qui signifie qu'ils ralentit le chargement du reste de votre page. Une autre raison pour mettre les scripts en bas est si vous n'avez pas à utiliser tout 'DOM ready" des fonctions. Depuis la balise script est en dessous de tous les éléments du DOM sera prêt pour la manipulation!

EDIT: Lire ceci: http://developer.yahoo.com/performance/rules.html#js_bottom

9voto

Alan Points 2190

L'un des aspects du placement est la performance. Voir cet article dans la discussion sur YSlow pour savoir pourquoi il est parfois recommandé de les mettre au bas du document.

En ce qui concerne les questions d’étendue, les règles de visibilité habituelles pour Javascript (variables définies dans ou en dehors des fonctions, locales, globales, fermetures, etc.) ne sont pas affectées à ma connaissance.

2voto

TheSmurf Points 10872

Ce n'est pas. La plupart des scripts de framework de programmation sont répartis sur toute la page. J'ai rarement vu des problèmes à cause de cela (et seulement des navigateurs plus anciens).

2voto

PJ Brunet Points 640

Si vous tirez le Javascript via XMLHttpRequest, comme Diodeus dit, il ne sera probablement pas travailler. Dans mon cas, il n'y a pas d'erreur, le navigateur ignore simplement le nouveau script(s).

J'ai fini avec cela, pas très élégant, mais fonctionne pour moi jusqu'à présent:

http://zeta-puppis.com/2006/03/07/javascript-script-execution-in-innerhtml-the-revenge/

Comment utiliser execJS: http://zeta-puppis.com/2006/02/23/javascript-script-execution-in-innerhtml/

Remarque: faites attention à l' &lt; la ligne: for(var i=0;i<st.length; i++)

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