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 :

innerHTML dans IE7


Sujet :

JavaScript

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut innerHTML dans IE7
    bonjours,
    je vous raconte mon histoire , j'ai une page html avec un <div id=indicateur></div> ce div est vide au départ. pour le remplir j'utilise ajax pour générer du code html puis je rajoute l'html que je récupère dans ce div.

    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
    function charge_indic(indic,distance3,lin)
    {
    	document.getElementById("indicateur").innerHTML="<center><p>Chargement</p><img src=\"images/anim_attente.gif\"/></center>";
    	document.getElementById("regression").innerHTML="";
    	var xhr = getXMLHttpRequest();
    	xhr.onreadystatechange = function() {
    		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    			affiche(xhr.responseText);
     
    		}
    	};
    	date1=new Date().getTime();
    	xhr.open("GET", "http://127.0.0.1:8080/traces2/indicateur.jsp?indic="+indic+"&distance3="+distance3+"&lin="+lin+"&ignoreMe=" +date1 , true);
    	xhr.send(null);
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function affiche(reponse)
    {
    	document.getElementById("indicateur").innerHTML=reponse;
    }
    bon tous marche bien jusqu'a maintenant et sur les deux navigateurs fireFox et IE7. sauf une chose, la page "indicateur.jsp" me retourne un bouton avec un déclencheur onclick="alert('hello')". lorsque je clique sur ce bouton sous fireFox ça marche très bien mais pas du tous sur IE7 ,
    il me dit "erreur sur la page". je pense qu'il ne reconnait pas le html que je rajoute a ma page.
    es qu'il ya une solution ?, ou bien je dois changer toute l'architecture de mon système.
    merci d'avance.

  2. #2
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    créer un element avec innerhtml est risqué ...

    http://www.developpez.net/forums/d53...ynamique-form/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Risqué mais tant qu'Internet Explorer dominera sur le marché ça restera une coutume justifiée pour des raisons de performance, hélàs.

    Autrement, saidgrd, jette un oeil à l'attribut "defer" de l'élément "script" pour le cas d'IE. Je pense que ça va te mettre sur une piste...

    (Je parlerais bien de prototype.js encore une fois mais je vais me faire taper sur les doigts... Allez, je m'y risque : String#evalScripts. )

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    ok, , je vais voir tous ça. merci...

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    bonjour saidgrd,

    j'ai eu le même problème avec Internet Explorer 7, et comme par hasard je me suis tombé sur cette discussion.
    Si le problème a été réglé explique nous un peu.

    Ton binome.

  6. #6
    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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Oscar Hiboux Voir le message
    Risqué mais tant qu'Internet Explorer dominera sur le marché ça restera une coutume justifiée pour des raisons de performance, hélàs.
    Je ne suis pas trop d'accord. IE n'empêche en rien l'insertion d'éléments via les méthodes du DOM qui sont, quel que soit le navigateur, plus performantes que innerHTML.

    @saidgrd : Dans ton cas, n'oublie pas que les attributs onévénement sont du JavaScript, donc à priori non pris en compte lors du innerHTML.
    Dans ton cas, une solution simple pourrait être d'ajouter le bouton sans le onclick avec innerHTML si tu y tiens, puis d'ajouter le onclick dans le callback de ta requête Ajax :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function affiche(reponse)
    {
    	document.getElementById("indicateur").innerHTML=reponse;
    	document.getElementById("ton_bouton").onclick=function(){alert('Hello');};
    }

  7. #7
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Risqué mais tant qu'Internet Explorer dominera sur le marché ça restera une coutume justifiée pour des raisons de performance, hélàs.
    coutume justifiée ... Bref ...


    Et niveau performance... la preuve en est qua cela ne fonctionne pas rien ne vaudra jamais le DOM pour le meilleur prise en compte crossbrowser des élements créés dynamiquement et ainsi que de tous leurs evènements et propriétés.
    Après moi ce que j'en dis, vous codez bein comme vous voulez en laissant la part belle à IE et en l'encourageant à continuer en marge des normes avec du propriétaire ...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    @Bovino, SpaceFrog : Au niveau des performances je doute que ça ait beaucoup évolué pour IE6/7. Ça fait un moment que je n'ai pas mesuré ça car j'utilise une couche d'abstraction pour ce genre de choses mais en 2006 je me souviens avoir poussé l'usage du code client abusivement (c'était presque malsain ) dans un projet de R&D. L'utilisation de innerHTML était bien plus concluante (XX%, voire XXX%). Maintenant, si on ne parle que des navigateurs qui n'ont pas de "navigateur" que leur nom, oui, l'usage de innerHTML pour des questions de performances ne présente plus spécialement d'avantage. Par contre, comment faites-vous pour insérer dynamiquement du contenu généré par le serveur sans avoir recours à innerHTML ?

    Finalement, je doute que l'on puisse dire que l'une ou l'autre est la meilleure à tout coup. Voyez par exemple certains avis collectés en 2009.


    @SpaceFrog : Oui, justifiée, malheureusement, et j'ai bien hâte au jour où Internet Explorer sera en sérieux déclin sur le marché du web. Pour l'instant Microsoft a encore plus de 60% du marché mondial. Risque de l'ignorer qui le souhaite... C'est une considération qui a toute son importance en entreprise : les clients souhaitent tous que leurs applications fonctionnent avec les navigateurs les plus représentés, et c'est normal !

    Pour ma part, j'haïs Internet Explorer, vraiment !! Alors en dehors du bureau la considération que j'ai à son égard est très proche de ce que tu dis !


    [...]vous codez bein comme vous voulez en laissant la part belle à IE et en l'encourageant à continuer en marge des normes avec du propriétaire ...

  9. #9
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Par contre, comment faites-vous pour insérer dynamiquement du contenu généré par le serveur sans avoir recours à innerHTML ?
    Tu n'as visiblement pas été voir le lien donné plus haut ...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Et... si tu développais ?

  11. #11
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    le lien donné pointe sur une petite librairie que j'ai fourni il y a un certain temps...
    les objets "gérérés" par le serveur sont en fait retournés au client sous forme de string formaté comme un objet de type json (hash)
    un simple eval retourne un veritable hash qui est alors passé en paramètre à la fonction de creation d'objets par le DOM.
    Je préfère m'assurer de l'efficacité de la création des objets, et être sûr que toutes leurs propriétés soient prises en compte plutot que d'essayer de grappiller quelques millisecondes à la création d'un objet ...

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    OK, c'est ce que j'avais imaginé. Merci, c'est plus explicite ainsi !

    Je comprends bien ton point de vue mais je trouve que l'on perd en commodité en faisant ce genre de choses. Par exemple, dans le cas où on aurait un patron, du côté serveur, générant la vue d'un composant. Il serait utilisé du côté serveur pour générer la page dans son état initial puis ensuite, au besoin, utilisé pour rendre ledit composant suite à un appel XHR. En utilisant innerHTML, Ajax.Updater & co. on n'a pas à se soucier de grand-chose et on concentre ses efforts à un seul endroit pour ce qui touche à la vue du composant. Par contre, avec la technique que tu décris, il faudrait avoir en plus une autre entité générant la description JSON à destination de ta moulinette. On aurait donc 2 zones de maintenances, avec tous les déboires que ça peut occsasionner.

    Enfin, rien n'empêche de mêler plusieurs technique tu me diras.

  13. #13
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Malheureusement dans ce cas de figure je ne me permets pas le luxe de la commodité , Pour moi il n'y a pas photo entre un code qui fonctionne intégralement et un code qui risque de poser des soucis de prise en compte des objets créés dynamiquement.
    Je t'accorde volontier que le innerHTML est séduisant de facilité, il suffit de générer le html coté serveur et hop. Je préfère de loin avoir à maintenir des deux cotés si nécessaire, mais avoir des objets pleinement opérationnels de façon crossbrowser.
    Maintenant si c'est pour le site de l'association de l'amicale des contemplateurs de coccinelles vertes à poids rose, tu peux te permettre de négliger ce genre de détails

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    C'est d'une toute autre ampleur ce sur quoi je travaille, héhé !

    As-tu un exemple de choses qui ne fonctionnent pas avec innerHTML ? (Désolé, je n'ai jamais rencontré de cas alors j'aimerais en apprendre tant qu'à faire. )

  15. #15
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    entre la pratique et la théorie ...
    entre les bidouilles et les méthodes "propres" ...
    si le dom a été créer c'est peut-être pour une bonne raison, mais apparement elle reste obscure pour certain :p

  16. #16
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    il suffit de parcourir le forum pour trouver nombre d'exemples de innerHTML posant des problèmes d'évènements ou de propriétés non pris en compte...
    Je n'ai pas d'exemple précis sous la main, ne le pratiquant plus depuis bon nombre d'années ...

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Ah bon... Si je tombe sur un sujet alors j'y jetterai un oeil alors, je suis vraiment curieux de voir quels sont ils - à part ces histoires de table dans IE6, qui demeurent des exceptions vouées à disparaître.
    Le concept de pouvoir mettre à jour le DOM à l'aide d'un fragment HTML sous forme d'une chaîne de caractères est une fonctionalité qui apporte tout un confort. Même s'il faudrait peut-être en donner l'accès autrement que par une propriété en lecture/écriture j'espère vraiment qu'on pourra en bénéficier encore longtemps ! (Autrement, bah, il faudra la coder. Un parser HTML en JavaScript ? Le navigateur ne le ferait il pas déjà nativement ? )


    P.S. : je viens de regarder l'abstraction que fait prototype.js par la méthode Element#update : il n'y a pas beaucoup de précautions alors j'imagine que le nombre de problèmes doit quand même être très limité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // Grosso-modo ça donne ça :
    element.innerHTML = content.stripScripts();
    content.evalScripts();
    Enfin, c'est un discours éternel qui a déjà usé un bon nombre de claviers. Pour ma part je prends le "risque" !

  18. #18
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    un exemple tout bète ... les éléments ajouté via innerHTML ne sont pas postés ...
    tu trouveras moults exemple sur la toile relatif a ce sujet qui ... indique tous de passer par le dom

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Ah oui ? Ça m'intrigue, j'essayerai ça ce soir (sauf faute de temps...), sois-en sûr !

    Dans un navigateur en particulier, hmm ? ^^

  20. #20
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    Citation Envoyé par SpaceFrog
    il suffit de parcourir le forum pour trouver nombre d'exemples de innerHTML posant des problèmes d'évènements ou de propriétés non pris en compte...
    Je n'ai pas d'exemple précis sous la main, ne le pratiquant plus depuis bon nombre d'années ...
    exemple indigeste avec innerHTML :
    http://www.developpez.net/forums/d73...rhtml-firefox/

    innerHTML et les tableaux :
    http://www.developpez.net/forums/d66...nnerhtml-ie-_/
    http://www.developpez.net/forums/d49...l/#post2947182 (regarde le lien que j'ai placé dans mon message #9)


    innerHTML et les listes déroulantes :
    http://www.developpez.net/forums/d64...nte-dynamique/


    etc.

Discussions similaires

  1. [POO] Document.open dans IE7 ne marche plus ?
    Par jgfa9 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 30/10/2008, 22h58
  2. L'image d'arrière-plan ne s'affiche pas dans IE7
    Par zonob dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 15/06/2007, 09h05
  3. Fichier Adm pour configurer les exceptions du proxy dans IE7
    Par jdelges dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 15/05/2007, 10h00
  4. InnerHTML dans une iframe
    Par Roromix dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/04/2007, 18h14
  5. Popup bizarre dans IE7
    Par viny dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 12/12/2006, 12h03

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