Pb de javascript marchant sous IE et pas sous FF
Un javascript modifiant le code HTML d’une page dynamiquement qui marche sous Firefox mais qui buggue sous IE, ce post peut vous aider :
Mon problème était le suivant : j’ai un bout de javascript qui insère des lignes dans un tableau avec insertBefore ou appendChild (suivant si je veux insérer à la fin ou non). Ce javascript marche très bien avec IE mais buggue avec Internet Explorer.
En regardant de plus près, je m’aperçois que c’est ce insertBefore qui marche pas, le nombre d’élément de mon tableau n’augmentant pas avant et après l’appel à cette fonction. (je précise que je l’utilisais bien sur le Body de mon tableau, et que le paramètre passé en deuxième position était bien un fils de mon tbody, plus d’explication sur insertBefore sont dispos ici).
L’explication est toute simple mais si on ne la connait pas, elle est dure à trouver :
On ne peut pas modifier en javascript sous IE un élément HTML qui n’est pas fermé ! ! !
(mais on peut sous Firefox :p )
Et oui, mon javascript qui contenait le insertBefore était contenu à l’intérieur du tableau qu’il modifiait…le voilà résolu!
Pour contourner ce fonctionnement de IE :
- soit vous ne pouvez pas bouger votre code javascript et vous devrez alors positionner un timeout via la fonction setTimeout avec un timer assez grand pour que votre page ait le temps de se charger.
- soit (et la solution me parait bien meilleure, un code js lié géographiquement au code me paraissant mauvais), vous positionnez votre javascript après la fermeture de l’élément HTML qu’il modifie ou vous le mettez dans le onLoad de votre page.
Si on philosophe un peu, on ne peut pas vraiment appeler çà un bug de IE car çà peut paraître logique, mais quand on n’est pas sous IE7 qui contient des outils de debug un peu meilleurs, pas facile de débugguer un truc comme çà…
Et pour finir, une petite analogie trouvée par Nico qui résumera le problème pour les débutants : un maçon sous Firefox pourra mettre une fenêtre sur un mur même si le mur au dessus n’est pas fini, son collègue sous Internet Explorer attendra quant à lui de finir son mur pour mettre sa fenêtre 🙂
Désolé pour les non geeks mais ce genre de problème pouvant arriver à tout développeur web, et ayant passé 2H là dessus hier car je ne le connaissais pas alors qu’il est tout bête, peut-être que je sauverais quelques désespérés avec ce post 🙂
Comments
Un commentaire à “Pb de javascript marchant sous IE et pas sous FF”
Laisser un commentaire
merci d’avoir eu une pensée pour les non geek! et vivement le jeu de demain!