buchholz35
Messages postés17Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention11 octobre 2009
-
25 sept. 2008 à 15:35
buchholz35
Messages postés17Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention11 octobre 2009
-
26 sept. 2008 à 22:11
Bonjour,
Afin de gagner du temps de chargement sur les pages,
je souhaite charger les fonctions, mes programmes au fur et à mesure des choix de l'utilisateur.
je cherche désepérément à incoporer un programme js depuis mon javascript en cours :
IE me pose toute sorte de soucis, soit le programme est dispo au deuxième cliq ...., soit j'ai le droit à une insulte.
"Contante chaîne non terminée"
ou
"Impossible de continuer l'opération à cause de l'erreur 80020101"
gniii
<hr />
function require(fullUrl){
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.open("GET",fullUrl,false); // true= asynch, false=wait until loaded
req.send(null);
} else if (window.ActiveXObject) {
req = new ActiveXObject((navigator.userAgent.toLowerCase().indexOf('msie 5') != -1) ? "Microsoft.XMLHTTP" : "Msxml3.XMLHTTP");
if (req) {
req.open("GET", fullUrl, false);
req.send();
}
}
if (req!==false) {
if (req.status==200) {
var dj_global = this; // global scope reference
if (window.execScript) {
alert ('ie');
window.execScript(req.responseText);
return null;
}
dj_global.eval(req.responseText);
//var global = this;
//alert (req.responseText.toString());
//window.eval(req.responseText);
//window.parent.eval(req.responseText);
//global.eval(req.responseText.toString());
} else if (req.status==404) {
// you can do error handling here
alert ('chargement inopérant');
}
}
};
<hr />
Merci de m'aiguiller
A voir également:
Script src scripts ac runactivecontent js type text javascript script
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 25 sept. 2008 à 15:53
bonjour,
si je comprend bien tu tente d'exécuter du javascript récupéré par ajax.
généralement, c'est totalement inutile ! met les fonctions dans la page appelante,
ça ira bien mieux.
néanmoins, si tu y tiens à tous prix ( rien ne le justifie je pense, mais bon ... )
regarde comment font ce qu'on appelle pompeusement "framework" ou
même GAG posté ici perso, execScript, je ne connais pas...
tu parles de IE... avec les autres navigateurs ça baigne ?
CordialementBul[mon Site][M'écrire]
généralement, c'est idiot de généraliser
on ne dit pas néanmoins mais handicapé nasal, <!--
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 25 sept. 2008 à 15:55
et ton remède ( document.write('<script type="text/javascript" src="'+fullUrl+'"> )
est pire que le mal.....
document.write va effacer toute la page, y compris le javascript !
contrôle donc le contenu de la page après.
CordialementBu
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 25 sept. 2008 à 16:23
ben, si c'est excclusif IE ( et je ne connais pas !?§ jamais vu ça... ),
ça ne fonctionnera pas avec les autres navigateurs.
eval est une possibilité ( si le php renvoi du javascript uniquement ! sans html )
regarde GAG, il te propose un exemple avec eval et en ajoutant le javascript à la page
MAIS "franchement" : évite ! encore une fois, c'est probablement inutile !
met tes fonctions dans la page appelante... tout baignera.
XtremDuke
Messages postés626Date d'inscriptionsamedi 28 septembre 2002StatutMembreDernière intervention18 mai 20094 25 sept. 2008 à 18:54
Salut,
Ce genre de comportement est gérer par toutes les libs qu'on trouve. Lorsque tu updates un container avec une source Html externe (via Ajax), il est toujours profitable de pouvoir executer les scripts qui se trouvent dans cette dernière.
Je te file une "traduction" d'une fonction permettant d'évaluer tous les scripts d'un flux html quelconque:
function evalScript(string){
var allScripts = new RegExp('<script[^>]*>([\\S\\s]*?)<\/script>', 'img');
var oneScript = new RegExp('<script[^>]*>([\\S\\s]*?)<\/script>', 'im');
var tabScripts = string.match(allScripts) || [];
for(var i = 0; i < tabScripts.length; i++){
eval(tabScripts[i]);
}
}
Ainsi tu peux utiliser la méthode suiante à ton algo :
if (req.status==200) {
var dj_global = this; // global scope reference
evalScript(req.responseText);
...
buchholz35
Messages postés17Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention11 octobre 2009 26 sept. 2008 à 00:01
Merci XtremDuke,
evalScript est infructueux,
En fait, le contenu de la réponse n'est pas du html, mais du javascript,
Donc, je cherche à interpréter directement le contenu du fichier pour en apprendre le contenu ! (Pas de balise)
Normalement, l'instruction window.eval(); devrait suffire, mais le fichier doit être trop long ?
Après plusieurs recherches, l'instruction window.execScript(); devrait convenir ... erreur 80020101 !
Pour info : http://msdn.microsoft.com/en-us/library/ms536420(VS.85).aspx
Pour l'instant, et là est mon souhait, c'est de pouvoir gagner du temps de chargement, et de ce fait découper et réorganier mes sources java.
XtremDuke
Messages postés626Date d'inscriptionsamedi 28 septembre 2002StatutMembreDernière intervention18 mai 20094 26 sept. 2008 à 10:25
"En fait, le contenu de la réponse n'est pas du html, mais du javascript,"
Peut importe, tu peux n'avoir que du Javascript, le tout est d'entourer ton script par les balises ouvrantes et fermante de script et de connaitre les limites de la fonction eval() notamment sur la porté des variables globales.
zen69
Messages postés584Date d'inscriptionjeudi 28 décembre 2006StatutMembreDernière intervention29 avril 20101 26 sept. 2008 à 17:00
Comme plusieur l'on dis, c'est tres rarement utile de faire ce que tu veux... franchement... je ne sais pas si ton fichier script est tres long mais j'ai rarement vu des fichier .js qui faisait plus de 100ko. Alors c'est plutot inutile. Juste par curiosité ... combien pesent ton fichier js?
Si tu veux vraiment sauver du temps de chargement (~0.1ms) lol, arrange toi pour que ton js reste en cache... comme ca tu le load juste une fois.... :P