Bonjour,
Firefox ignore le code JavaScript des balises script rapatriées par responseText d'"AJAX".
Une explication ?
(j'ai fait une 'tite recherche sur Google mais je n'ai rien trouvé :?, désolé)
Merci d'avance !
Version imprimable
Bonjour,
Firefox ignore le code JavaScript des balises script rapatriées par responseText d'"AJAX".
Une explication ?
(j'ai fait une 'tite recherche sur Google mais je n'ai rien trouvé :?, désolé)
Merci d'avance !
tu veux dire que tu essaye de dire au browser que du texte récupéré par ajax est en fait un script ???
essaye plutot de faire unet ensuite de lui coller ton texte en innerHTMLCode:document.createElement('script')
Disons que je récupère un truc du genre :
Code:
1
2 <b>coucou</b> <script>alert("coucou")</script>
<script> est ignoré et je ne sais pas si c'est normal ou pas.
oui c'est normal on ne peut pas inserer un script comme ça sur une page ...
il faut passer par un createElement ...
Une fois que j'ai mon responseText, comment j'utilise createElement ? :?
En fait, je ne vois pas comment faire avec cette méthode ...
dans ton responseTexte il te faut uniquement le code sans les balises ...
ensuite tu fais
et ensuite tu colles le code récupéré dedans :Code:
1
2 var BaliseScript=document.createElement('script') BaliseScript.type='text/javascript'
avec innerTHML ou createTextNode
et pour finir tu le colle dans le bodyCode:BaliseScript.appendChild(document.createTextNode(responseText))
ou ailleurs ...Code:document.body.appendChild(BaliseScript)
Excuse moi, j'ai du mal à te suivre :( Je suis plutôt débutant en JS ...
Je veux changer le contenu d'un div mais je ne vois pas comment remplacer le contenu de ce div par "BaliseScript".
De plus mon reponseText est globalement un bout de code HTML.
Ca ne va pas poser problème au nouvel élement 'script' qu'on lui donne du HTML ? Il ne devrait pas plus attendre que du JS ?
le contenu d'un div ?
ha en fait je crois que je viens de comprendre, tu cherche à mettre le code visible sur la page ...
et non un script actif ...
n'utilise pas un div mais une balise <pre> et ton javascript sera alors visible et non interprété comme un script ...
Aïe, je ne fais toujours pas bien comprendre ...
Reprenons ^^ !
Je reçois par responseText un bout de page HTML à mettre dans un innerHTML (d'un div).
Donc ça peut représenter n'importe quoi : un tableau, des formulaires, des listes ...
Sur ce bout de page, je veux également insérer des balises <script> pour qu'elles soient intrépretées.
Par exemple pour :
Code:<b>coucou1</b><script>alert("coucou2")</script>
je m'attendais à voir - en plus du 'coucou1' dans un div qui fonctionne - 'coucou2' dans le popup ...
question subsidiaire ...
sisi on va y arriver ...
le script il est dans le responseText noyé dasn le reste ou séparé ???
et pour qu'il soit interprété, je confirme le createElement ...
Oui, il est noyé ...
Essaies tu de dire qu'il faut essayer de le sauver de la noyade pour qu'il vie ? :mouarf:
J'ai l'impression que c'est du côté de "l'event" que vient le problème.
En fait, ton morceau de code JS passe très bien sur la page, mais le problème est qu'il n'est pas executé.
Pour en avoir le coeur net, renvoi par ajax un morceau de code par exemple un lien appelant une fonction JS (envoyé par Ajax) qui affiche une alerte.
Ca devrait marcher...
Oui les onclick et toutes ces choses fonctionnent.
C'est juste le contenu des <script> qui ne passent pas.
il faut sortir tes scripts du response texte (avec un regExp par exemple)
et créer les scripts avec le DOM avec créateElement('script') comme explicité plus haut ...
Maintenant que l'on a recollé les morceaux, ça marche !
Voici mon code :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 var tmp = xhr_object.responseText; document.getElementById(divDest).innerHTML= tmp; y_exec_scripts(document.getElementById(divDest)); function y_exec_scripts(obj){ scripts = obj.getElementsByTagName("script"); for(i=0;i<scripts.length;i++){ var BaliseScript=document.createElement('script'); BaliseScript.type='text/javascript' BaliseScript.appendChild(document.createTextNode(scripts[i].innerHTML)) document.body.appendChild(BaliseScript) } }
Ca double les balises <script> dans le DOM mais ça ne me dérange pas puisque la moitié n'est pas interprété.
Je suis preneur de toute amélioration ^^
oui je disais que tu pouvais fire un regExp pour faire un replace dans le responseText de <script ...... script>
Une solution (mieux?) existait déjà dans la partie "Proposition d'ajout à la FAQ" de ce forum : http://www.developpez.net/forums/sho...?t=6259&page=2 ;)
tu peux préciser quel post FREMAY ? je ne vois pas à quel code tu fais allusion ...
arf oui parser le responseText