Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/06/2011, 12h05   #1
Invité régulier
 
Jo
Inscription : novembre 2010
Messages : 25
Détails du profil
Informations personnelles :
Nom : Jo
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : novembre 2010
Messages : 25
Points : 6
Points : 6
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 :
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.
zalzasta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 12h41   #2
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 421
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 421
Points : 2 809
Points : 2 809
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 :
1
2
  scriptFile = loadScriptFile("D:\\file2.js");
  eval(scriptFile,'unsafe');
A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 13h14   #3
Invité régulier
 
Jo
Inscription : novembre 2010
Messages : 25
Détails du profil
Informations personnelles :
Nom : Jo
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : novembre 2010
Messages : 25
Points : 6
Points : 6
j'ai passé la string 'unsafe' en seconde paramètre, mais cela ne change rien. Ma fonction n'est toujours pas visible.
zalzasta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 13h26   #4
Membre expérimenté
 
Avatar de nadox
 
Homme
Développeur
Inscription : 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
Points : 545
Points : 545
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 :
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);
}
nadox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 13h32   #5
Invité régulier
 
Jo
Inscription : novembre 2010
Messages : 25
Détails du profil
Informations personnelles :
Nom : Jo
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : novembre 2010
Messages : 25
Points : 6
Points : 6
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.
zalzasta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 13h52   #6
Membre expérimenté
 
Avatar de nadox
 
Homme
Développeur
Inscription : 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
Points : 545
Points : 545
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 ?
nadox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 14h59   #7
Invité régulier
 
Jo
Inscription : novembre 2010
Messages : 25
Détails du profil
Informations personnelles :
Nom : Jo
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : novembre 2010
Messages : 25
Points : 6
Points : 6
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.
zalzasta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 08h47   #8
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 421
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 421
Points : 2 809
Points : 2 809
je suppose que tu est sous IIS

tu peux inclure un script en utilisant
Code :
<!-- #include PathType = FileName -->
mais je ne sais quel est alors le cycle d'évaluation

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h27.


 
 
 
 
Partenaires

Hébergement Web