Menu

[Javascript] Importer un fichier js [Résolu/Fermé]

electroking 208 Messages postés dimanche 14 septembre 2014Date d'inscription 23 mai 2018 Dernière intervention - 19 oct. 2016 à 14:01 - Dernière réponse : electroking 208 Messages postés dimanche 14 septembre 2014Date d'inscription 23 mai 2018 Dernière intervention
- 21 oct. 2016 à 09:58
Salut,
je souhaiterais, à partir d'une liste du type:

liste = [
'fonction1',
'fonction2'
];


pouvoir importer ou relier a la page html le fichier

fichierUrl = liste[i] + '.js';


pour exécuter la fonction

nomFonction = liste[i] + 'Main()';


qui se trouve à l'intérieur depuis ma page HTML (qui est déjà chargée).

J'ai essayé de placer une balise

<script src="fichierUrl "></script>


sauf que comme je la place APRES le chargement de la page et l'exécution du début du script, il ne la reconnait pas.

Uncaught ReferenceError: historyMain is not defined
(anonymous function)


Comment pourrais-je m'y prendre ?

Cordialement,
Faure Lucas.
Afficher la suite 

5 réponses

codeurh24 762 Messages postés samedi 29 mars 2014Date d'inscription 20 mai 2018 Dernière intervention - 19 oct. 2016 à 19:22
0
Utile
Bonsoir.
Tu as l'air de confondre fonction et fichier js.

donc que représente pour toi fonction1.js ?
electroking 208 Messages postés dimanche 14 septembre 2014Date d'inscription 23 mai 2018 Dernière intervention - 20 oct. 2016 à 20:00
Non, je ne confond pas ^^

fonction1.js est un fichier contenant la fonction fonction1Main()
le père. 6058 Messages postés mardi 15 mai 2012Date d'inscription 24 mai 2018 Dernière intervention - 20 oct. 2016 à 22:13
0
Utile
Bonjour

Il y a bien le problème d'attendre que le script soit chargé avant d'appeler la fonction qu'il contient, mais il y en a un autre que tu ne sembles pas avoir vu.

Dans
<script src="fichierUrl "></script>
, fichierUrl est bel et bien une l'URL "fichierUrl ", pas la variable javascript fichierUrl que tu as défini ailleurs. C'est la valeur d'un attribut(src) d'une balise HTML. Les variables javascript n'existent que dans le code javascript, et une balise HTML, même la balise <script>, n'est pas du code javascript.

Pour obtenir l'effet que tu désires, il faudrait qu'en javascript tu viennes affecter ta variable fichierUrl à l'attribut src d'une balise <script>.
Ça peut être fait en manipulant le DOM ou avec un document.write, par exemple.
Ensuite, il faut que tu appelles ta fonction dans le "onload" de cette même balise.
Ça a l'air un peu laborieux, mais pas infaisable. Je regarde ce que ça peut donner et je reviens.
le père. 6058 Messages postés mardi 15 mai 2012Date d'inscription 24 mai 2018 Dernière intervention - 20 oct. 2016 à 23:04
<body>
<div>div1 pour voir</div>

<script type= "text/javascript">

var liste = [
 'fonction1',
 'fonction2'
];
var i=0;
var lt=String.fromCharCode(60);
fichierUrl = liste[i] + '.js';
nomFonction = liste[i] + 'Main()';

document.write('<script src=' + fichierUrl +' onload="' + nomFonction + ';">'+lt+'/script>');

</script>

<div>div2 pour voir</div>

  </body>

Ça lance bien, selon que i vaut 0 ou 1, la fonction fonction1Main de fonction1.js, ou la fonction fonction2Main de fonction2.js
Pas très propre, mais ça marche.
electroking 208 Messages postés dimanche 14 septembre 2014Date d'inscription 23 mai 2018 Dernière intervention - 21 oct. 2016 à 09:58
Merciiiiiiiiii je t'aime toi
en fait contrairement a ce que ce qui ont lus ce message ont du penser j'ai bien compris les système de fichiers et de fonctions ^^ je voulais obtenir ce résultat là en fait :

<body>

<div id="links"></div>

<script type= "text/javascript">
var liste = [
 'fonction1',
 'fonction2'
];
var i=0;
for (i; i<liste.length; i++) {
 var lt=String.fromCharCode(60);
 fichierUrl = liste[i] + '.js';
 nomFonction = liste[i] + 'Main()';
 
 document.write('<script src=' + fichierUrl +'>'+lt+'/script>');
 document.getElementById('links').innerHTML = document.getElementById('links').innerHTML + '<br /><a href="javascript: ' + nomFonction + ';" rel="nofollow noopener noreferrer" target="_blank">' + nomFonction + '</a>';
}
</script>

</body>


Je me suis seulement très mal exprimé :/