Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JVS / AJAX] Peut on inséré du javascript dynamique ?

Sujet résolu
Anonyme
    23 août 2011 à 13:04:47

    Bonjour,

    j'explique mon contexte et je poserais ma question après :

    J'ai créer une page ou tout le contenu est généré par l'AJAX. Jusque là tout marche mais, cependant, lorsque j'appel une page avec du javascript dedans (dans une balise script), et bien le navigateur ne l’interprète pas....

    Donc admetons que j'ai une page index.php(ou html...) et que mon mon div portant l'ID "response" inclut une page se nommant ma_page.php contenenant ce code :

    <script type="text/javascript"> <!-- ou bien language="Javascript" -->
    function clickMe(){
    alert("Si tu me lis, c'est que ça a marché");
    }
    </script>
    
    <p>
        <input type="button" value="Click Me" onclick="clickMe();" />
    </p>
    


    Et bien le javascript ne seras pas interprété. Donc ma Question est :

    Peut-on inséré dynamiquement du Javascript (comme ci-dessus) dans une page ? (et en évitant l'ajout dynamique de balise script dans le header)


    Merci de vos futures réponses :)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      23 août 2011 à 13:10:25

      innerHTML ne permet pas d'insérer des balises script.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        23 août 2011 à 14:15:01

        Comment peut on faire pour interpréter les scripts javascript ?
        • Partager sur Facebook
        • Partager sur Twitter
          23 août 2011 à 14:21:23

          Salut, une des solutions : iframe dont src="ma_page.php" sans ajax
          • Partager sur Facebook
          • Partager sur Twitter
            23 août 2011 à 14:40:24

            Citation : ninlock

            Salut, une des solutions : iframe dont src="ma_page.php" sans ajax


            Surtout pas.

            Avant ton appel Ajax :
            var scripts = document.getElementsByTagName( 'script' );
            var i = scripts.length;
            var script;
            while ( i-- ) {
                script =  scripts[ i ];
                script.parentNode.removeChild( script );
            }
            


            Comme ca apres ton appel, tu n'as que les nouveau scripts sur la page (enlever un script n'enleve pas ses variables etc. donc on peut le faire).

            Je regarde comment executer les scripts et j'edite.
            • Partager sur Facebook
            • Partager sur Twitter
              23 août 2011 à 14:52:34

              Citation : xavierm02

              Surtout pas.


              Merci d'expliquer pourquoi, car selon les besoins il peut justement s'agir de LA solution, même si je déteste les frames.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                23 août 2011 à 14:58:22

                on ma toujours appris a ne pas appelé les iFrame, de tête c'est pour des failles de sécurité...
                • Partager sur Facebook
                • Partager sur Twitter
                  23 août 2011 à 15:01:06

                  Non, pas pour la securite. Parce que la securite te fait chier apres.

                  J'ai trouve comment faire s'executer les scripts. Il y a des facons plus "normales" de faire mais elles ne sont pas cross-browser.

                  var head = document.getElementsByTagName( 'head' )[ 0 ];
                  var scripts = document.getElementsByTagName( 'script' );
                  var i = scripts.length;
                  while ( i-- ) {
                      head.appendChild( scripts[ i ].cloneNode( true ) );
                  }
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    23 août 2011 à 15:02:46

                    Le principe serais de l'inclure dans le header, ok :)
                    (iFrame = XSS possible) non ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 août 2011 à 15:08:50

                      XSS = cross site scripting... donc c'est le fait de permettre en PHP a quelqu'un de mettre des scripts qui peut faire du XSS.
                      Il y a la same origin policy.

                      Et le principe, c'est pas de le mettre dans le header, c'est de cloner le noeud.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 août 2011 à 15:14:06

                        Normalement il vaut mieux écrire le code JS dans un fichier JS et importer ce fichier JS (en créant dynamiquement une balise script avec document.crateElement) juste après l'initialisation du HTML appelé en AJAX.

                        Si tu ne peux pas faire ça, il y a la solution de xavierm qui est plus simple à mettre en place (et plus élégante qu'un eval() je suppose), mais s'il y a une faille dans ton site permettant d'ajouter un JS malveillant dans la page appelée, cette méthode exécutera le script malveillant.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 août 2011 à 15:52:36

                          Citation : Geoffrey-Zéro

                          Normalement il vaut mieux écrire le code JS dans un fichier JS et importer ce fichier JS (en créant dynamiquement une balise script avec document.crateElement) juste après l'initialisation du HTML appelé en AJAX.


                          Yep, c'est mieux.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          [JVS / AJAX] Peut on inséré du javascript dynamique ?

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown