INCLUDE() EN JAVASCRIPT

Signaler
Messages postés
6
Date d'inscription
vendredi 5 avril 2002
Statut
Membre
Dernière intervention
24 avril 2002
-
Messages postés
202
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/15807-include-en-javascript

Messages postés
202
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019

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é.
Messages postés
6
Date d'inscription
vendredi 5 avril 2002
Statut
Membre
Dernière intervention
24 avril 2002

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".