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.
'script');
s.type = 'text/javascript''head'
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 :
'/*contenu fonction*/'+
'}'
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
Bonjour,
Ce script est exactement ce dont j’ai besoin, merci car les différentes solutions trouvées sur le net ne me convenaient absolument pas.
Mais je rencontre un souci lors de son utilisation : j’ai ce message sous FF :
XML tag name mismatch (expected br)
J’avoue ne pas comprendre ce que cela veut dire, ni voir le rapport avec un manquant :s
Est-ce que l’on ne peut passer que du script JS dans cette fonction ? C’est ce que me laisse supposer la portion de code pour le moteur KHTML. Mais si c’est le cas, comment faire pour pouvoir passer un patchwork d’HTML et de JS ?
Merci !
Il ne faut passer que du javascript à cette fonction. Stock le html que tu veux recevoir dans une variable javascript au format JSON.
Bonjour,
merci pour ton code, c’est la solution qu’il me fallait mais je ne comprends pas comment l’utiliser, les anciennes versions j’avais compris mais la du coup il n’y a plus besoin de faire la boucle sur tout les scripts de la page ?
J’ai cette fonction qui recharge un div en ajax à partir d’une page qui contient du script js
var global = this;
function reload1()
{
var c = document.getElementById(‘containerTree’);
c.innerHTML = global.recupContenu(« vue/vuesElementaires/vueElementaireGestionnaireFichierPartiel.php »);
var allscript = c.getElementsByTagName(`script`);
for(var i=0;i<allscript.length;i++)
{
global.eval(allscript[i].text);
}
}
mais elle ne fonctionne pas, du coup je voulais essayer avec ta nouvelle version mais je ne sais pas avec quel variable l’appeler.
Merci de ton aide
J’ai tourné pendant 15 ans 😉 avant de trouver ce script. J’ai l’ai couplé avec une autre fonction et ca tue trop!!! Merci!!!!!! Vla!!! du soleil from Sénégal rien que pour toi!!!
Voici ma sauce si ça peut servir a quelqu’un:
'script');
s.type = 'text/javascript''head''script'
En mode utilisation, ca donne:
result = xhr.responseText;
// On se sert de innerHTML pour afficher le resultat dans la div
'divResult'//On evalue le tout et ca roule ma poule
'divResult');
Merci ! tout simplement !!
Merci beaucoup pour le partage, vous m’avez retiré une sacrée épine du pied
Bonjour,
J’utilise Simple JS (http://simplejs.bleebot.com/) pour charger des contenus différents dans une DIV.
Cependant, j’essaie de charger des pages avec du contenu javascript et bien évidemment, ca ne fonctionne pas …
Ca fait deux semaines que j’essaie de bidouiller mais sans réussite!
Pourrais je faire appel à vos talents ?
(Je ne sais pas si c’est la peine de préciser mais je suis un Novice en Ajax)
Merci d’avance,
BaNJo