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] Ajax, innerHTML et fonction javascript - solution ?


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Par d�faut [AJAX] Ajax, innerHTML et fonction javascript - solution ?
    Bonjour,

    Nouveau membre sur le forum mais adepte des faqs de ce site depuis longtemps, je me permets de m'inscrire et de poster sur le sujet bouillant qu'est AJAX en ce moment.

    Depuis le debut de la semaine, je fais un site en AJAX pour le boulot. L'utilisation d'AJAX est plus une lubie personnelle qu'une r�el n�c�ssit�, et m'a provoqu� des maux de t�te consid�rables, en particulier a cause � cause d'un "bug" d'innerHTML que l'ont rencontre aussi bien sous IE 6 que sous Firefox 1.504 : Le javascript contenu dans l'innerHTML remplac� n'est pas ex�cut�. et Eval ne corrige pas ce probl�me car les fonction �valu�es ne sont pas pour autant disponibles pour le reste de la page. J'ai d�sesperement essay� des choses inefficaces ou totalement complexes et farfelues (cot� serveur) avant de me dire qu'il devait y avoir un moyen d'y rem�dier en javascript.

    j'ai trouv� ce topic qui proposait une solution qui me paraissait surdimensionn�e. j'ai donc essay� d'�crire la mienne, mais je n'ai � ma disposition que IE6 firefox et opera 8.54. Ce dernier ne r�agissant pas bien � ma fonction, en effet, suivant ce que je fais : soit opera n'execute pas le script, soit il l'execute 2 fois, soit il l'execute ... sans en copier le contenu !

    les commentaires, bug, corrections, optimisations et autres sont les bienvenues.

    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
     
    function innerHTMLJS(obj,content)
    {
      /* Copyleft by GourouLubrik 2006 */
      if(typeof(obj) != 'object' && typeof(content) != 'string') return;
      obj.innerHTML = content;
     
      var scripts = obj.getElementsByTagName('script');
      if(scripts == false) return true; // no node script == no problem !
      for (var i=0;i<scripts.length;i++)
      {
        var scriptclone = document.createElement('script');
        if(scripts[i].attributes.length > 0) /* boucle de copie des attributs du script dans le nouveau node */
        {
          for (var j in scripts[i].attributes)
          {
            if(typeof(scripts[i].attributes[j]) != 'undefined'
             && typeof(scripts[i].attributes[j].nodeName) != 'undefined' /* IE needs it */
             && scripts[i].attributes[j].nodeValue != null
             && scripts[i].attributes[j].nodeValue != '' /* IE needs it ou il copie des nodes vides */) 
            {
              scriptclone.setAttribute(scripts[i].attributes[j].nodeName,scripts[i].attributes[j].nodeValue);
            }
          }
        }
        scriptclone.text = scripts[i].text; // on copie le corp du script
         /* 
             la j'ai pas compris, si je ne return pas sous opera ici : le javascript s'execute 2 fois - 
             mais la : le script s'execute mais n'est pas a ce moment la placé entre les balises scripts !
             et si je return juste après le innerHTML, le script n'est pas executé... ---o(<    
         */
        if (navigator.userAgent.indexOf("Opera")>0) { return; }
        /* on force le remplacement du node par dom, qui a pour effet de forcer le parsing du javascript */
        scripts[i].parentNode.replaceChild(scriptclone,scripts[i]); 
      }
      return true;
    }
    A propos d'ajax, pour tous les adeptes de PHP je conseille tr�s vivement le script disponible sur http://www.hemmady.com/ajaxagent
    je ne mets pas le reste de mon contenu php/js car il se base sur cette librairie.
    Elle est absolument g�niale, et la d�couverte de JSON est un bonheur pour convertir les objets PHP en javascript.
    PS: Ne pas oublier de str_replace("\"","\\\"") vos contenus JSON sous peine de plantage instantan� de votre navigateur =).

  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 : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 532
    Par d�faut
    Pourquoi ne pas utiliser eval ???
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    if (scriptbalise.src==null || scriptbalise.src=="" || (!scriptbalise.src)) {
       eval(scriptbalise.innerHTML);
    }
    else {
       eval(FonctionAJAXQuiRetourneLeContenuDuFichierJs(scriptbalise.src));
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Par d�faut eval is evil ! =p
    Bien sur, j'avais pens� a eval, mais apr�s quelques test en situation, je me suis aper�u que les fonctions evalu�es ne sont par la suite plus disponibles dans le reste de la page.

    Ces fonctions �taient utilis�es dans des evenements genre onblur(); et alors que l'eval avait parfaitement fonctionn�, mon evenement onblur me disait que la fonction �tait alors ind�finie...

    cela n'est pas toujours le cas car le script suivant fonctionne tr�s bien :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    <html><head/>
    <body>
    <script type="text/javascript">
      eval('function toto() { alert("toto"); } toto();');
    </script>
    <input type="button" value="toto()" onclick="toto();"/>
    </body></html>
    je serais curieux de savoir a partir de quel moment la fonction pars�e est m�moris�e ou non. =/

  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 : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 532
    Par d�faut
    Fonction valide dans eval uniquement (selon le nav) : function Name() {}
    Fonction valide d�finitivement : Name = function () {}
    ex dans une balise script :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    <script [...]>
    MsgBox = function (text) {alert(text);};
    MsgBox("Hello");
    </script>
    ex dans un eval;
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    eval("MsgBox = function (text) {alert(text);};\n
    MsgBox(\"Hello\");");

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Par d�faut
    tr�s interessant (et tr�s bizarre aussi) cette diff�rence =)
    je testouillerais �a lundi au boulot, parce que les heures sup' c'est mal =)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Par d�faut :)
    Finalement, j'ai pas attendu jusqu'a demain, et ce petit changement de d�finition de fonction a fait des miracles !

    Moult mercis, dommage, elle me plaisait bien ma fonction au dessus ^^.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [AJAX] Comment rajouter une fonction Javascript
    Par darkdrow dans le forum G�n�ral JavaScript
    R�ponses: 6
    Dernier message: 16/07/2007, 13h25
  2. [AJAX] Ajax et innerhtml
    Par reg11 dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 05/09/2006, 10h33
  3. R�ponses: 3
    Dernier message: 17/08/2006, 14h43
  4. [AJAX] Ajax et ex�cution des fonctions javascript
    Par Bobtop dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 27/06/2006, 15h22
  5. [AJAX] Ajax ne r�actualise pas le javascript ?
    Par shadowbob dans le forum G�n�ral JavaScript
    R�ponses: 8
    Dernier message: 23/01/2006, 08h26

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