IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Importer/exporter des variables et des fonctions


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut Importer/exporter des variables et des fonctions
    Bonjour, la question peut paraître trivial pour certains, mais je n'ai pas trouvé un bon tuto au sujet des import/export en Javascript.

    J'ai plusieurs page HTML utilisant le même script mise à part une ou 2 fonctions qui sont modifiés spécifiquement pour chacune d'elle.

    Ce qui fait que j'ai au final un script par page. Et quand je veux faire une petite modification, je dois aller modifier tous les scripts.

    J'aimerai bien avoir un script unique que toutes les pages utilisent, et donc facilement modifiable, et juste un petit script avec ma fonction spécifique pour chaque page.

    La question est, comment faire pour que le script principale puisse utiliser une fonction et des variables qui sont dans un autre script?

    Cdt.

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Salut,

    Je ne sais pas où tu as "cherché" mais c'est étonnant que tu n'aies pas trouvé de réponse!

    Principe:
    Imaginons que tu veuilles afficher la date du jour sur toutes les pages de ton site, en haut de page.

    1) Tu crées ton script qui affiche la date:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    window.addEventListener("load",function(){
    	const d=document.createElement("div");
    	d.textContent=`Nous sommes le ${new Intl.DateTimeFormat(
    		undefined,
    		{day:"numeric",weekday:"long",month:"long",year:"numeric"})
    		.format(new Date())}.`
    	document.body.insertBefore(d,document.body.firstChild);
    });

    2) Tu copies ce code dans un fichier vierge que tu appelles date.js.

    3) Tu insères dans le head de tes pages la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="date.js"></script>
    Voilà.

  3. #3
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    En fait,

    Pour etre plus clair,

    je suis entrain de faire un casse-brique avec différents niveaux. Un niveau par page.

    Le script est identique sur toutes pages sauf la fonction qui s'occupe de l'affichage des bricks, sinon tous les niveaux seraient identiques .

    Je veux isoler cette fonction dans un autre script, afin d'eviter à avoir un gros script à chaque page, et surtout pour la mise à jour du script en cas de bug.
    A l'heure actuelle, quand je découvre un bug, je dois mofidier le code sur chaque page.

    Voici un schema:
    page 1 contient script 1
    page 2 contient script 2
    page 3 contient script 3

    et je voudrais avoir:

    page 1,2,3 pointe vers le même script + script contenant uniquement la fonction de l'affichage des briques personnalisées

    Je sais qu'il faut faire le script de la fonction dans un fichier séparé avec un export, afin de pouvoir l'importer dans le fichier Js principale, mais je n'arrive pas à trouver la procédure.

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Citation Envoyé par nadfri2019 Voir le message
    je n'arrive pas à trouver la procédure.
    Ah bon? A quoi a servi ma réponse, alors?

  5. #5
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    J'arrive pas à m'exprimer clairement .

    Je n'ai pas de problème à lancer un script via le head, le problème est plutot le suivant:

    J'ai un script principal contenant 3 fonctions par exemple:
    Script.js =>
    -init()
    -construction()
    -affichage() cette fonction a besoin de la fonction construction() pour fonctionner

    je veux isoler la fonction "construction()" dans un autre script, car sur toutes mes pages, init() et affichage() sont toujours identiques.

    Une fois construction() dans un fichier séparé, comment faire pour l'appeler dans le fichier principale, vu qu'il ne peut pas être reconnu en l'etat?

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="fichier_qui_contient_construction.js"></script>

  7. #7
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    J'ai compris mon erreur, en effet ta méthode marche

    Comme j'ai l'habitude de mettre des window.onload en debut de tout mes scripts, ca faisait bugger l'app.

    Et en le retirant simplement du script construction(), ca marche nickel .

    Moi qui me prenait la tete avec import function ect....

    Je te remercie.

  8. #8
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Dernière question, comment fait-on pour les variables?

    Afin qu'elles soient reconnues indépendamment du fichier?

  9. #9
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Ben il faudrait un exemple, un bout de code, quoi...
    Mais une variable globale dans un fichier externe reste une variable accessible à tous les niveaux du code;

  10. #10
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    En reprenant ton exemple:

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <html>
    <head>
              <script src="date.js"></script>
    	  <script src="script.js"></script>
    </head>
    <body>
    </body>
    </html>

    date.js:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    window.addEventListener("load",function(){
    	const d=document.createElement("div");
    	d.textContent=`Nous sommes le ${new Intl.DateTimeFormat(
    		undefined,
    		{day:"numeric",weekday:"long",month:"long",year:"numeric"})
    		.format(new Date())}.`
    	document.body.insertBefore(d,document.body.firstChild);
    });
    script.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log(d.textContent);
    Sur la console, on a :
    ReferenceError: d is not defined

  11. #11
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    C'est parce que d est défini dans un gestionnaire d'événément; même s'il s'agit de "window", la variable n'est pas considérée comme globale;
    dans ce cas précis, soit tu déclares ta variable avant le gestionnaire "load", soit tu créées un objet global dans lequel tu stockes toutes tes variables:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const v={
       briques: 10000,
       balle:true,
       score:0
    }

    et quand tu as besoin d'une variable, tu appelles v.briques, v.balle, etc.

  12. #12
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    J'ai finalement réussi à déclarer mes variables globales en dehors du window.onload, par contre j'ai du mettre mes 2 scripts à la fin de la balise "body".

    Sinon quelques une de mes variables étaient soit pas initialisé, ou bien à la valeur null.

    En général c'est du à quoi?

  13. #13
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Si tu définis "d" comme un élément de la page, il faut que cet élément existe au moment où tu l'appelles;
    Donc, si tu l'as appelé en dehors de "onload" et avant que l'élément soit chargé, tu provoques une erreur;

  14. #14
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    A partir de quel moment on peut savoir quand un élément est chargé ou non?

    Et pourquoi l'emplacement du fichier JS à encore une importance (head, fin de body etc...)?

  15. #15
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Le fichier html est interprété de haut en bas...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/07/2008, 11h11
  2. Réponses: 6
    Dernier message: 13/02/2006, 13h13
  3. Réponses: 10
    Dernier message: 02/11/2005, 11h12
  4. [MFC] importer/exporter des ressources
    Par r0d dans le forum MFC
    Réponses: 2
    Dernier message: 25/07/2005, 17h24
  5. Export des fonctions stockées
    Par bob_doulz dans le forum Oracle
    Réponses: 5
    Dernier message: 20/07/2004, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo