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 :

[AJAX] Executer Javascript chargé par Ajax


Sujet :

JavaScript

Vue hybride

Sylvain71 [AJAX] Executer Javascript... 02/10/2006, 15h16
FremyCompany http://www.developpez.net/foru... 02/10/2006, 15h27
Sylvain71 Merci pour cette solution,... 02/10/2006, 17h29
FremyCompany Ca m'étonne franchement ! Il... 02/10/2006, 17h42
Sylvain71 Non ce n'est pas en ligne et... 02/10/2006, 17h45
Peerofloo Je confirme, ca fonctionne... 08/04/2007, 16h11
FremyCompany En effet, il y a des... 08/04/2007, 17h04
Invité Ca ne marche pas quand il y a... 26/02/2007, 00h51
FremyCompany document.write = mal 26/02/2007, 19h02
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Par défaut [AJAX] Executer Javascript chargé par Ajax
    Bonjour,

    J'utilise sur un projet des div sous forme de "panel flottants". Le contenu de ceux ci est chargé "bourrinement" par ajax. C'est à dire en gros :
    maDiv.innerHTML = chaineRecupParAjax ;

    Evidemment pas de probleme pour l'html, par contre, le javascript chargé n'est pas executé.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Blablabla html tralalala
    <script type="text/javascript">
    	alert('Je suis executé !') ;
    </script>
    Normal me direz vous, mais une solution me donnerez vous ?

  2. #2
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532

  3. #3
    Membre chevronné
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Par défaut
    Merci pour cette solution, elle fonctionne à merveille ... sous FF

    Sous ie, cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var AllScripts=div.getElementsByTagName("script");
    ne retourne aucun élément.

  4. #4
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Ca m'étonne franchement !
    Il me semble l'avoir developpé pour IE pourtant (mais bon, ptêtre que j'ai testé FF)
    Deplus, j'ai déjà conseillé le script a de nombreuses personnes qui ne m'ont jamais rien dit de tel...
    Ta page est-elle en ligne ?

    EDIT :
    As tu fais des tests simples (ex : setInnerHTML(document.getElementById("divContent"), "<script>alert('')</script>"))

  5. #5
    Membre chevronné
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Par défaut
    Non ce n'est pas en ligne et je ne peux pas vraiment le mettre ...

    Je vais continuer à chercher parce que je ne comprend pas non plus pourquoi ça ne fonctionne pas.

    Pour m'aider dans mes tests peux tu me dire comment récuperer le nom des tags dans les boucles de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var All=div.getElementsByTagName("*");
     
    	for (var i=0; i<All.length; i++) 
    	{

  6. #6
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    1) voir mon Edit
    2) Oui : item.tagName.toLowerCase()=="script"

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 17
    Par défaut
    Citation Envoyé par Sylvain71
    Merci pour cette solution, elle fonctionne à merveille ... sous FF

    Sous ie, cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var AllScripts=div.getElementsByTagName("script");
    ne retourne aucun élément.
    Je confirme, ca fonctionne pas du tout sous IE7. Bizzare...

  8. #8
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    En effet, il y a des problèmes sous IE 7...
    Code corrigé :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    // setInnerHTML Sécurisé
    function setInnerHTML(divContent, HTML) {
        divContent.innerHTML=HTML; 
        try {
          var All=divContent.getElementsByTagName("*");
          for (var i=0; i<All.length; i++) {
            All[i].id=All[i].getAttribute("id")
            All[i].name=All[i].getAttribute("name")
            All[i].className=All[i].getAttribute("class")
          }
        } catch (ex) {}
        try {
          var AllScripts=HTML.extractTags("script");
          AllScripts.forEach(function (v) {
            eval(v);
          })
        } catch (ex) {}
        try {
          var AllStyles=HTML.extractTags("style");
          AllStyles.forEach(function (v) {
            var s=document.createStyleSheet()
            s.cssText=v;
            s.enabled=true;
          }, true)
        } catch (ex) {}
    }
     
    String.prototype.extractTags=function(tag) {
        var matchAll = new RegExp('(?:<'+tag+'.*?>)((\n|\r|.)*?)(?:<\/'+tag+'>)', 'img');
        var matchOne = new RegExp('(?:<'+tag+'.*?>)((\n|\r|.)*?)(?:<\/'+tag+'>)', 'im');
        return (this.match(matchAll) || []).map(function(scriptTag) {
          return (scriptTag.match(matchOne) || ['', ''])[1];
        });
      }
     
    Object.prototype.forEach=function(delegate, ownpropertiesonly) {
            if (typeof(delegate)=="function") {
                if (this instanceof Array && typeof(ownpropertiesonly)=="undefined") {
                    ownpropertiesonly=true;
                }
                for (key in this) {
                    var ok = (!ownpropertiesonly);
                    if (!ok) {
                        try {
                            ok=this.hasOwnProperty(key)
                        } catch (ex) {}
                    }
                    if (ok) {
                        try { delegate(this[key], key, this) } catch(e) {
                            // ...
                        }
                    }
                }
            }
            return false;
        }
     
    Object.prototype.map=function(iterator) {
        var results = [];
        this.forEach(function(value, index) {
          results.push(iterator(value, index));
        });
        return results;
      }
    Testez voire si ca marche (comme c'est extrait d'un code bcp plus long, il se peut que des méthodes manquent dans l'extrait)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 17
    Par défaut
    Nikel ca marche, merci.

    Edit: Par contre j'ai un autre soucis (Tjr sous IE7). Les styles CSS de ma feuille de style ne sont pas appliqué sur le code HTML ajouté via le "innerHTML".

  10. #10
    ALkyD
    Invité(e)
    Par défaut
    Ca ne marche pas quand il y a des document.write() à l'intérieur du script... Ni sous FF ni ailleurs. Au lieu d'écrire le texte là où il y a le document.write, ça l'écrit sous une page blanche (comme en temps normal lorsque la page est déjà chargée et qu'on utilise document.write après).

  11. #11
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    document.write = mal

Discussions similaires

  1. [AJAX] Executer code javascript écrit par ajax
    Par socket77 dans le forum AJAX
    Réponses: 1
    Dernier message: 23/12/2009, 08h13
  2. Executer du javascript chargé par une requête AJAX
    Par HWICE dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 12/10/2009, 15h29
  3. Réponses: 1
    Dernier message: 25/09/2009, 12h03
  4. [AJAX] Champ suggestion et portion de page chargé par ajax
    Par VinceMD dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 09/03/2009, 18h54
  5. [AJAX] Accès fonctions déclarées dans page chargée par Ajax
    Par yagrasdemonde dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 04/02/2008, 15h33

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