GetElementsByTagName("script") Sur un document traité par XSLT et rendu par AJAX

Résolu
rivarol89 Messages postés 19 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 22 avril 2010 - 19 avril 2010 à 19:18
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 24 avril 2010 à 10:39
Bonjour à tous,

j'ai le problème suivant :

j'utilise Ajax (prototype et scriptaculous) pour générer un formulaire transcrit par XSLT préalablement décrit dans un document XML :

HTML--->AJAX--->PHP--->XSLTPROCESSOR--->Résultat dans un div (id="ici") du HTML

L'intrigue : le résultat du XSLTPROCESSOR contient du code javascript :
<script language="JavaScript">blablabla....</script>


Bien sur ce code ne peut être exécuté lors de l'affichage du résultat dans le HTML.
Du coup je fais ceci a partir du HTML qui lance la requete AJAX :

var scripts = document.getElelementById('ici').getElementsByTagName('script')

for (var i=0; i<scripts.length; i++) {
     eval(scripts[i].text);
}


Ce qui théoriquement devrait exécuter mon code javascript contenu dans le résultat.
Il n'en n'est rien !

En effet : la balise <script> semble INTROUVABLE au yeux de getElementsByTagName !(dailleur la suite du code javascript n'est pas exécuté, il y a quelque chose ici que javascript n'aime pas...)

Le plus bizarre c'est que lorsque je fais un getElementsByTagName sur une balise
quelconque du résultat, eh ben la il, trouve...

le javascript est définit ainsi dans le XSL :
.
.
.
<xsl:template match='text'>

<script language="JavaScript">
   <![CDATA[
         alert("TEST");
   ]]>
</script>
</xsl:template>
.
.
.


Ca fait déjà un certain temps que je suis sur le problème.
Si quelqu'un peut m'aider avant que je ne trouve la solution dans 5 jours, ou que je n'abandonne mon projet, ce serait vraiment super et je lui serait très reconnaissant !

Merci d'avance.
Cordialement.

9 réponses

rivarol89 Messages postés 19 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 22 avril 2010
22 avril 2010 à 03:49
Trouvé !
Prototype gère mon problème en fait :

il suffisait d'ajouter l'option :
evalScripts:true


dans mon Ajax.Updater.

j'avais essayé evalJS donné sur le site offciel mais apparement, c'est evalScripts...
Comprit les enfants ? evalJS c'est le mal.

Non plus serieusement evalJS doit être utilisé uniquement si la réponse de la requete AJAX
est du code javascript et uniquement du code javascript. dans le cas contraire, utiliser
evalScripts.

Bonne nuit !
3
rivarol89 Messages postés 19 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 22 avril 2010
19 avril 2010 à 19:21
Je tiens a préciser que le :
var scripts = document.getElelementById('ici').getElementsByTagName('script')

for (var i=0; i<scripts.length; i++) {
     eval(scripts[i].text);
}

Est exécuté a l'occasion de l'évènement OnComplete de la requête AJAX.
0
rivarol89 Messages postés 19 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 22 avril 2010
19 avril 2010 à 19:25
A merde, je me suis planté de section... je savais pas où mettre le sujet alors j'ai vu GENERAL et j'ai choisi ça.

Désolé.
Peut on déplacer le sujet ?
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
19 avril 2010 à 19:57
Bonjour,
juste en passant, as tu essayé de mettre une ID sur la balise SCRIPT et de la récupérer avec getElementById

;O)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rivarol89 Messages postés 19 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 22 avril 2010
19 avril 2010 à 20:02
Oui, après il suffit de passer par getElementById, Ça marche mais bon le problème sera
que je ne connaitrais pas le nombre de balises script

enfin je pourrais faire comme ca en bidouillant un peu, ca ne serait pas vraiment correct
(w3c et tout ca...) sinon j'aimerais quand meme comprendre pourquoi la variable scripts
reste vide [Undefined]...

Merci quand même
0
rivarol89 Messages postés 19 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 22 avril 2010
19 avril 2010 à 23:02
Bon allé Feuk W3C, mon xsl balance une fausse balise <sscript>...bla bla bla...</sscript>
Et le getElementByTagName marche sans pb. je me demande parfois comment les concepteurs de ces méthodes (qui doivent être compétents) font pour ne pas changer un peu les regles du xml W3C and co... Ceci dit si quelqu'un est capable de me dire pourquoi j'ai ce problème je serais content et j'en adopterais la solution.

cordialement.
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
20 avril 2010 à 19:07
Bonjour,
avec quel explorateur as tu ton soucis ?
j'ai réalisé un petit fichier test et je n'ai pas rencontré de problème pour récupérer les scripts.
Donc apparemment il nous manque quelque chose pour mieux appréhender le problème.

;O)
0
rivarol89 Messages postés 19 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 22 avril 2010
22 avril 2010 à 03:04
j'ai moi même procédé à des test miniatures pour voir si mon probleme ne venait du reste du code, eh ben non c'est la meme histoire. Utilise tu bien ajax ? je procède ainsi :

index.html lance une requette AJAX qui consiste à intéroger un script php en lui postant l'adresse d'un fichier xml et d'un fichier xml, le php Utilise XSLTProcessor pour transcrire
le XML en HTML et le renvoi via un echo.

Sur le OnComplete de la requette AJAX je procede à un getElementsByTagName("script")
à fin de mettre la main sur les script contenus dans le résultat de la requette AJAX (qui n'ont pas été éxécutés étant donné leur incrustation tardive).

C'est ici que ca bloque : getElementsByTagName("script")ne fonctionne pas : le tableau renvoyé est vide.


Du coup j'ai placé le code javascript généré dans le xsl entre les balises <sscript></sscript>
Cette balise n'existe pas ! mais est bien trouvée par getElementsByTagName("sscript") et je peu ainsi exécuter mon code.


Maintenant le problème c'est qu'apparement IE n'a pas l'air d'aimer ca.
Vous m'aideriez beaucoup en m'expliquant d'ou vient le problème car je n'ai toujours pas trouvé.
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
24 avril 2010 à 10:39
Bonjour et merci pour le retour, c'est bon à savoir...

Ce qu'il faut également savoir c'est que lorsque l'on charge un fichier au format HTML dans un DIV IExplorer ne copie dans celui ci que la partie entre les balises BODY, ce qui fait que les scripts ne sont pas repris sauf si ils sont mis juste avant la balise de fin de BODY.

;O)
0
Rejoignez-nous