Include() en javascript

0/5 (2 avis)

Snippet vu 45 098 fois - Téléchargée 27 fois

Contenu du snippet

Suite à un message sur le forum, j'ai eu l'idée de créer une 'tite fonction javascript afin de faire des includes comme on peut le faire dans beaucoup d'autres langages

Source / Exemple :


<script type="text/javascript">
	function include(fileName) {
		if (document.getElementsByTagName) {
			Script = document.createElement("script");
			Script.type = "text/javascript";
			Script.src = fileName;
			Body = document.getElementsByTagName("BODY");
			if (Body) {
				Body[0].appendChild(Script);
			}
		}
	}
</script>

Conclusion :


L'utilisation est relativement simple il suffit de faire :
include("fichier.js"); :)

ATTENTION : ne marche PAS avec Netscape 4.x (testé avec IE 6 et NS6 / Mozilla)

Effet indésirable : si vous souhaitez utiliser une fonction se trouvant dans votre fichier javascript inclus, vous devez tout d'abord sortir de l'instruction dans laquelle vous vous trouvez (avec Mozilla en tout cas)

Par exemple en faisant :
include("monfichier.js");
window.setTimeout('lafonctioncontenuedanslautrefichier()', 100);
Le 100 étant ici le temps en millisecondes après lequel la fonction sera appellée

A voir également

Ajouter un commentaire Commentaires
verdy_p Messages postés 202 Date d'inscription vendredi 27 janvier 2006 Statut Membre Dernière intervention 29 janvier 2019
15 août 2009 à 10:23
Pas terrible l'idée de mettre le script inclus à la fin de l'élément BODY, notamment quand le script est sensé s'exécuter avant.
Je le mettrais plutôt à la fin de l'élément HEAD, qui devrait toujours être présent dans le DOM HTML, même s'il est vide car le code HTML source n'en contient pas, et même si le document HTML lui-même (non strictement conforme avec la norme HTML) ne contient pas d'élément BODY, si le navigateur est conforme avec le DOM HTML normalisé.
De plus un vrai include devrait pouvoir s'exécuter de façon synchrone avec la fonction include() du javascript lui-même.
Pour cela, il faudrait que le corps de la fonction Javascript utilisant include() soit lui-même modifié (via le DOM) afin que l'instruction include() elle-même soit remplacée directement par le contenu du fichier référencé. Cependant cela risque de ne pas marcher sur de nombreux navigateurs, car une fonction en cours d'exécution (déjà compilée) si elle peut être éventuellement modifiée, ne l'est qu'en créant une nouvelle instance de cette fonction qui sera liée dans le DOM, sans interrompre la fonction en cours qui ne sera pas modifiée, avec pour effet donc qu'en sortiede include() il manquera l'exécution du contenu inclus et incorporé dans le DOM.
La question n'est pas évidente, et c'est bien évidemment un manque du langage Javascript lui-même, qui ne permet pas de modifier l'instance de la fonction en cours d'éxécution ou plus exactement ici l'instance de la fonction parente qui a appelé la fonction include(): une fonction appelée ne peut pas modifier le code de la fonction du contexte parent (ce serait un très sérieux problème de sécurité difficile à isoler, d'autant que généralement la fonction parente en cours d'exécution est déjà compilée en code natif, et que la fonction appelée n'a pas accès directement à son source pour le modifier). La seule solution serait donc que include() ne soit pas vu en Javascript comme un appel de fonction Javascript, mais comme un mot-clé natif, pris en compte par le compilateur, et prenant en compte divers paramètres de sécurité entre l'appelant et l'appelé.
cs_moonz Messages postés 6 Date d'inscription vendredi 5 avril 2002 Statut Membre Dernière intervention 24 avril 2002
21 avril 2002 à 19:49
ce script ne sert que dans le cas où la page n'utilise pas les balises <script>...</script> (dans le cas de WSH par exemple), sinon tu peux utiliser l'attribut src. Avec ton exemple de setTimeout ca donne :
<script src="monfichier.js" language="JavaScript">
window.setTimeout('lafonctioncontenuedanslautrefichier()', 100);
</script>

J'ai mis 5 car ca vaut 0 dans le cas d'une page utilisant les balises <script>...</script> mais 10 dans le cas de WSH par exemple ou il n'y a pas de fichier "parent".

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.