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 !
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 innerHTML
Code : Sélectionner tout - Visualiser dans une fenêtre à part document.createElement('script')
Disons que je récupère un truc du genre :
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 var BaliseScript=document.createElement('script') BaliseScript.type='text/javascript'
avec innerTHML ou createTextNode
et pour finir tu le colle dans le body
Code : Sélectionner tout - Visualiser dans une fenêtre à part BaliseScript.appendChild(document.createTextNode(responseText))
ou ailleurs ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 HTML : Sélectionner tout - Visualiser dans une fenêtre à part <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 ?
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 JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager