javascript eval global final
Posté le Vendredi 6 avril 2007 à 18 h 30, Read it in english with GoogleVoici la release finale de la méthode pour utiliser la function eval dans un contexte global.
if(window.execScript){
return window.execScript(script);
} else if(navigator.userAgent.indexOf(‘KHTML’) != -1){ //safari, konqueror..
var s = document.createElement(’script’);
s.type = ‘text/javascript’;
s.innerHTML = script;
document.getElementsByTagName(‘head’)[0].appendChild(s);
} else {
return window.eval(script);
}
}
Ceci fonctionne sur tout les navigateurs acceptant javascript. Si vous avez des problèmes, merci d’en faire part!
Je recherche la chaine “KHTML” dans la propriété useragent afin de trouver les navigateur utilisant le moteur de rendu KHTML et ses dérivés (ex: AppleWebKit). Ce moteur ne sait pas évaluer le code en mode synchrone (inline). C’est le moteur de base de Safari et de Konqueror.
Les frameworks utilisent généralement window.setTimeout(script, 0) mais ça ne marche pas même si on essaye d’attendre l’éxécution. Les variables voulant être définies ne seront disponibles que lors d’un apel non inline (asynchrone).
Il est inutile d’utiliser un pointeur sur l’object window comme précédemment, cela étant utile uniquement dans des implémentations externe au navigateurs des moteurs de rendu.
Charger des framework via Ajax, c’est maintenant possible
Historique : eval global partie 2, eval global

[…] mise à jour : Et la voilà, code final pour un eval javascript propre […]
le Jeudi 12 avril 2007 @ 17 h 35De la balle
merci ça m’aide beaucoup!
Bonjour,
Excellent site efficace et plein de contenu riche. Félicitations pour ton boulot, c’est propre et ça aide beaucoup de gens … comme moi :-). Donc merci.
Cependant, n’ayant pas un niveau très élevé en javascript et son utilisation en AJAX, je ne comprends pas comment mettre en oeuvre ce script. J’ai mis la fonction telle quelle avec les fonction de déclaration de l’objet AJAX. Ensuite comment faut-il éxécuter les fonctions JS que l’ont veut lancer dans les .js inclu dans les balises ?
J’ai essayé ceci :
globaleval.mafonction(){
/*contenu fonction*/
}
globaleval.mafonction(); //Execution
… mais ça ne fonctionne pas. Le javascript inclu dans les chargés par AJAX ne s’éxécute pas.
Je comprends à peu près l’interêt du script mais c’est tout … Si l’un d’entre vous peut me donner une petite explication, il me manque surement pas grand chose. Merci.
oula c’est pas claire tout ça.
globaleval(_str_) est identique à la fonction native eval(_str_) à la différence que les variables déclarées dans le script _str_ seront disponibles dans toute la page (et pas seulement dans le corp de la fonction qui exécute eval)
voici un exemple simple :
var _str_ = 'var mafonction = function() {'+ '/*contenu fonction*/'+ '}'; globaleval(_str_); mafonction();si tu n’a pas de variable à déclarer via AJAX alor tu peux simplement utiliser eval(_str_)
Vraiment un grand merci XoraX, ton code m’a grandement aidé !
Bonne continuation !!
Bonjour !
Je ne sais pas si mon problème est bien en rapport avec ce site. En fait, je ne suis pas dans un context Ajax, mais HTML simple.
Sur mon site, je désire charger une série de scripts JS, écrits sur des fichiers externes. Ces scripts contiennent essentiellement des inputs type = hidden. Mais pour les test, j’utilise un fichier JS avec un input type = button. Ainsi je peux visualiser le résultat.
Lorsque j’inclus le code d’insertion du script directement sur ma page, le bouton s’affiche sans problème. Mais si j’utilise une fonction (lancée par onload) pour insérer le script dans la page (dans le but d’insérer tous les fichiers JS externes par la suite), alors là rien ne s’affiche.
J’ai essayé d’adapter votre script, mais sans résultat (je suis sous IE 6.0). Avez-vous une solution ?
Merci d’avance !
Salut!
Je pense que c’est la solution à mon problème mais 2 questions:
- Ou doit-on mettre le code javascript, dans la page renvoyée par ajax ou dans la page qui appelle la fonction AJAX?
- Comment on lance le script qui ne fonctionnait pas avant globaleval?
Merci!
Salut,
j’utilise le thickbox, ca ne fonctionne plus quand c’est un lien généré en ajax peux tu me dire précisément ou placer ton code moi j’ai ça
var reponsePHP=oHttp.responseText;
window.eval(reponsePHP);
j’ai essayé de remplacer avec ton code mais j’obtiens une erreur
merci d’avance
ben c’est simple, tu place ma fonction dans ta page entre balise script et tu fais :
var reponsePHP=oHttp.responseText;
globaleval(reponsePHP);
à la place de ton code.
donc si je comprends bien (déjà merci de poster ce code!!) la fonction pour var globaleval est placé dans la page principal dans le head entre des balises script, avec le code tel quel?
et ensuite dans les pages chargés on écrit:
var reponsePHP=oHttp.responseText;
globaleval(reponsePHP);
en début de code ( soit apres functionxxx){ici; …}???
c’est bien sa?
Bonjour, je n’arrives pas a utiliser ce code et j’en ai vraiment besoin, pouvez vous me dire comment ‘integrer exactement, je ne comprend pas.
Merci