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 un fichier javascript


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 30
    Par défaut Importer un fichier javascript
    Bonjour,

    J'ai un bout de code qui importe un fichier javascript contenant une fonction test à partir d'une fonction 1 de mon code principale.

    Cette fonction 1 exécute une autre fonction 2 présente dans mon code principale, et j'aimerais que ma fonction de test importée soit accessible depuis ma fonction 2.

    Pour ceux qui n'ont pas trop compris mes explications voici le code simplifiée :

    Code du programme principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function first(){
     
    	scriptFile = loadScriptFile("D:\\file2.js");
    	eval(scriptFile);
     
    	alert(typeof test);
     
    	second();
    }
     
    function second(){
     
    	alert(typeof test);
     
    }
     
    function loadScriptFile(filename){
     
    	var fso = new ActiveXObject("Scripting.FileSystemObject");
    	var otf = fso.OpenTextFile(filename, 1);
    	var scriptFile = otf.ReadAll();
    	otf.Close();
    	return scriptFile;
    }
    Code du fichier importée :
    Donc le code du programme principale est appelée grâce à la fonction first.
    La première alert de la fonction first donne 'function'.
    Mais la deuxième alert de la fonction seconde donne 'undefined'.

    Avez-vous une solution pour rendre accessible les fonctions importés depuis la fonction 2 sans charger le script en global ni en chargeant le script depuis la fonction 2 ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    bonjour.

    jscript renforce la sécurité de eval et les variables et fonctions définies dans eval sont hors de portée

    http://msdn.microsoft.com/en-us/libr...jscriptanchor7

    essais un truc genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      scriptFile = loadScriptFile("D:\\file2.js");
      eval(scriptFile,'unsafe');
    A+JYT

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 30
    Par défaut
    j'ai passé la string 'unsafe' en seconde paramètre, mais cela ne change rien. Ma fonction n'est toujours pas visible.

  4. #4
    Membre chevronné Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2010
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 360
    Par défaut
    Bonjour,

    Je n'ai pas Internet Explorer sous la main pour tester, mais ça peut marcher en utilisant un script dynamique peut-être ?

    Si, comme je le suppose le readAll de l'activeX renvoie une chaine, tu dois pouvoir faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    function first(){
     
        loadScriptFile("D:\\file2.js");
     
        alert(typeof test);
     
        second();
    }
     
    function second(){
     
        alert(typeof test);
     
    }
     
    function loadScriptFile(filename){
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var otf = fso.OpenTextFile(filename, 1);
        var scriptFile = otf.ReadAll();
        otf.Close();
     
        var scriptTag = document.createElement("script");
        scriptTag.text = scriptFile;
        document.getElementsByTagName('head')[0].appendChild(scriptTag);
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 30
    Par défaut
    Effectivement, le fait de rajouter le script lu à la balise head de la page rend ma fonction visible.

    Seul inconvénient que j'ai oublié de préciser, ce script est exécuté côté serveur donc pas d'objet window, donc cette solution ne fonctionne pas pour mon cas.

  6. #6
    Membre chevronné Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2010
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 360
    Par défaut
    Précision effectivement utile !

    Je ne sais pas si ça peux changer quelque chose, mais dans la première fonction, scriptFile n'est pas précédé du mot-clef var, je suppose que l'interpréteur la déclare donc dans le scope de la fonction, et que l'eval(même 'unsafe') fait la même chose du contenu de cette variable...

    Ne faudrait-il pas déclarer explicitement la variable dans le scope global ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 30
    Par défaut
    Si je définie scriptFile en tant que variable global, son contenu sera visible depuis la fonction 2, mais l'eval se faisant dans la fonction 1, le contenu du fichier de script évalué et exécuté n'est toujours pas visible depuis la fonction 2.

    Je ne crois pas qu'une solution soit possible sans passer par un eval global et non dans une fonction.

  8. #8
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    je suppose que tu est sous IIS

    tu peux inclure un script en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!-- #include PathType = FileName -->
    mais je ne sais quel est alors le cycle d'évaluation

    A+JYT

Discussions similaires

  1. importation de fonction javascript dans un autre fichier javascript
    Par kouadjalain dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/07/2007, 16h44
  2. Probleme import fichier javascript
    Par snoozer dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 30/08/2006, 11h59
  3. Importer un fichier IDAPI32.cfg propre à chaque appli(BDE)
    Par carlhian dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/05/2004, 14h18
  4. Importer des fichiers textes délimités
    Par Invité dans le forum Outils
    Réponses: 2
    Dernier message: 23/09/2002, 13h56
  5. [DEV-C++]#import de fichier .tlb
    Par pdl dans le forum Dev-C++
    Réponses: 6
    Dernier message: 19/07/2002, 22h46

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