IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Insérer du code Javascript avec innerHTML.


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Par défaut Insérer du code Javascript avec innerHTML.
    Salut,

    J'ai une div qui contient des éléments mais aussi du Javascript:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <div id="DIV_page">
    <script>
    function JS_showDetails() {
     //Intérieur de la fonction...
    }
    </script>
    <div>Le contenu....qui contient des tableaux et des div</div>
    </div>
    Alors si j'affiche directement ce code, ça marche. Par contre, si je l'insére à partir d'un innerHTML comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      WP.get('DIV_page').innerHTML = get('DIV_page').innerHTML ;
    WP pour window.parent et get pour getElementById

    Pour pouvoir le mettre dans la page principale à partir d'une iframe, le code javascript n'est pas exécuté et je me retrouve avec des:
    Erreur*: JS_showDetails is not defined
    J'ai regardé et apparemment un innerHTML ne va pas permettre d’insérer du Javascript, ce n'est vraiment que du texte.

    Comment je peux faire ?

    merci,
    Vincent.

  2. #2
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Bonjour,

    C'est normal, les script JS ne sont pas évalués lorsqu'ils sont insérés via innerHTML.

    Regarde dans la FAQ, un sujet traite ce genre de problème.

    Cordialement,
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    C'est de toute façon un erreur de conception à la base.
    Tout le js nécessaire à la page devrait etre présent au chargment.

    Mais depuis l'evolution d'ajax on voit de plsu en plus ce genre de choses ...

    avec jQuery il est possible d'aller chercher un script sur le serveur sous forme de texte et de l'intégrer à la page .
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Par défaut
    Citation Envoyé par Torgar Voir le message
    Bonjour,

    C'est normal, les script JS ne sont pas évalués lorsqu'ils sont insérés via innerHTML.

    Regarde dans la FAQ, un sujet traite ce genre de problème.

    Cordialement,
    J'ai essayé avec eval comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      var div = WP.get('DIV_page');  
      div.innerHTML = get('DIV_page').innerHTML ;
      var x = div.getElementsByTagName("script");   
      for (var i=0;i<x.length;i++) {  
          eval(x[i].text);  
      }
    Alors si j'ajoute une alert dans ma div:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <div id="DIV_page">
    <script>
    alert('Voilà alert') ;
    function JS_showDetails() {
     //Intérieur de la fonction...
    }
    </script>
    <div>Le contenu....qui contient des tableaux et des div</div>
    </div>
    Alors l'alert() va bien être éxécutée 2 fois, la première lorsqu'elle est chargée dans l'<iframe, la seconde lorsqu'elle est mise dans DIV_page de window.parent.
    Par contre, cela ne marche d'avec Firefox (ni chrome ni IE) et de toute façon je reste avec l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur*: JS_showDetails is not defined
    J'ai pas très bien compris la FAQ que tu m'as donné en lien. C'est pour de l'Ajax, non ?
    Je n'utilise pas Ajax.

    merci,
    Vincent.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Par défaut
    J'ai cherché un peu plus en profondeur et j'ai ceci qui marche:
    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <!doctype html>
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>test page: Using Javascript to Insert Javascript</title>
    </head>
    <body>
     
    <p>this page tests generating js code. If you see a alert box, then it means it works. (view source code)</p>
     
    <div id="DIV_js" style="display:none;">
    var i = 'ici' ;
    function hello() {
      alert('toto dit '  + i) ;
    }
    </div>
    <script>
    var ele = document.createElement("script");
    ele.type = 'text/javascript';
    ele.innerHTML= document.getElementById("DIV_js").innerHTML ;
     
    document.body.insertBefore(ele, (document.getElementById("DIV_js"))[0]);
     
    </script>
     
    <p onClick="hello();">Back toAsynchronous Javascript; Using Javascript to Insert Javascript</p>
    </body>
    </html>
    Ca marche avec Firefox, Safari, chrome, Opera mais ça ne marche pas avec IE(7 à 9) j'ai l'erreur:
    SCRIPT5009: « hello » est indéfini

    Vous savez pourquoi ?

    merci,
    Vincent.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Par défaut
    C'est bon, IE n'aime pas ele.innerHTML il préfère le .text:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ele.text = document.getElementById("DIV_js").innerHTML ;
    Et ça marche avec IE(7 à 9) et tous les autre

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par defacta
    Et ça marche avec IE(7 à 9) et tous les autre


    Ca ne marche pas parce que ton code est correct (imagine bien que le innerHTML d'un script, ça n'a pas beaucoup de sens...) mais parce que tu appelles une fonction déjà définie dans le document...

    Que cherches-tu à faire au juste ?
    Ceci dit, je pense que tu devrais essayer d'apprendre un peu les bases de JavaScript avant de l'utiliser, notamment la notion de portée du code dans le document.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. integrer code javascript avec jsp
    Par sas1986 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/07/2011, 18h49
  2. code javascript avec mozilla firefox
    Par jesslegende dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2011, 15h35
  3. Code javaScript avec IExplorer OU FireFox
    Par fatenatwork dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/03/2008, 14h02
  4. Code javaScript avec IExplorer OU FireFox
    Par fatenatwork dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 11/03/2008, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo