|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éprouvé
![]() Yvan Consultant informatique Inscription : août 2006 Messages : 360 ![]() |
Suite à une galère de quelques jours, je voulais juste partager une petite expérience sur un bug étrange d'Internet Explorer...
Lorsque vous voulez ajouter un noeud à élément de votre page (un noeud DOM), si le script qui gère cet ajout n'est pas un fils direct ou en dehors du noeud dans lequel on veut ajouter l'élément, lors de l'ajout (parent.appendChild(newElement)), Internet explorer va afficher une page d'erreur au lieu du contenu de la page réellement générée, indiquant que le serveur est introuvable à cause d'un problème DNS. J'ai testé sous IE 6 et 7 sous XP SP2 et tous les 2 étaient impactés. J'ai aussi testé d'autres navigateurs pour voir si ils étaient impactés et le résultat a été clair aucun problème pour Firefox 2 ni Safari 3 (pour Windows). N'ayant pas d'autres navigateurs sous la main, je me suis contenté de ceux-ci. Voici donc un exemple de code pour vérifier sur votre version d'Internet Explorer : Code html :
__________________
|
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 119 ![]() |
Ce qui est d'autatn plus curieux c'est que c'est non seulement l'appendChild qui pose problème mais en plus la position du nouvel élément ???
Code :
mais si l'on essaye d'inverser l'ordre il se passer le même bug ???
__________________
Ma page 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 ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
||
|
|
00
|
|
|
#3 | ||
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 119 ![]() |
La lumière nous vient de Auteur !
Il m'a fait remarqué que en fait au moment de l'execution du script les balises de fermeture des div ne sont pas encore interprétées ... voici donc comment résoudre ce petit problème : Code :
__________________
Ma page 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 ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
||
|
|
00
|
|
|
#4 | ||||
|
Expert Confirmé Sénior
![]() ![]() Inscription : avril 2004 Messages : 4 796 ![]() |
Spaceforg : bah, c'est la seule explication que j'ai trouvée... Dans l'exemple de yjuliet le code s'execute avant la fermeture du div parent... Comme le parent n'est pas fermé, on ne peut pas ajouter d'élément à la fin.
Par contre, tu as oublié de préciser le second paramètre dans le setTimeout (la temporisation). C'est normal ? et pour l'insertBefore : Code :
ouvrante <div id="child"> existe (même si les balises </div> des div du child et du conteneur ne sont pas encore interprétées). J'en suis arrivé à cette explication car lorsque l'on sort le script du conteneur : Code html :
|
||||
|
|
00
|
|
|
#5 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 119 ![]() |
peut on simplement dire en conclusion qu'il s'agit d'un problème d'instanciation d'objet ?
pour le paramètre manquant... non c'est eun erreur ... mais ça à l'aire de focntionner quand même ... ce qui voudrait dire que c'est une question de milliseconde ?
__________________
Ma page 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 ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() ![]() Inscription : avril 2004 Messages : 4 796 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#7 | |
![]() ![]() Inscription : janvier 2007 Messages : 9 315 ![]() |
Citation:
quel est l'intérêt d'un script "dans la page", par rapport à un lancement via le traditionnel onload ? Il sera bien en dehors du noeud en question, et du coup, ça enlève tout interrogation sur le timeout à prévoir (qui me semble de toutes façons bien aléatoire, pour les raisons données par Auteur ... auquelles je rajoute mon cas perso : les petits veinard qui ont la joie de voir les pages se contruire sous leurs yeux gràce à un modem 56K, et pour lesquels il faut rajouter 2 zéro au timeout prévu). ... enfin, je demande ça surtout parce que j'aime pas mettre des scripts dans le body |
|
|
|
00
|
|
|
#8 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 119 ![]() |
en fait la seule justification que je verrasi à cela serait pour ajouter des scripts javascript avec des includes en php ?
__________________
Ma page 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 ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé
![]() ![]() |
Regardez comment faire ce que vous voulez sans timeout, sans onload, sans trucs sans broc et sans machin non plus
Code :
Sinon, vous avez tjrs document.write qui fait ca mais moi j'aime pas trop donc...
__________________
Fremy Pour vos développements Web et une navigation agréable, le tout gratuit : 1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !) 2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey |
||
|
|
00
|
|
|
#10 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 119 ![]() |
oui bien sur Fremy nous en étions tous là ...
il est bien entendu évident qu'en sortant le script de l'objet il n'y a aucun souci ... le chalenge était 1 de comprendre la cause de l'erreur et 2 d'arriver à le faire fonctionner sans bouger le script ... le plus simple est encore de mettre une fonction dans le head et de la lancer sur le onload ...
__________________
Ma page 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 ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#11 | |
|
Membre éprouvé
![]() Yvan Consultant informatique Inscription : août 2006 Messages : 360 ![]() |
Citation:
Si il me disait "le noeud n'existe pas, ou n'est pas un objet, ou ...", ça me conviendrait, mais le problème est qu'il me redirige vers une page "server not found" laissant penser à une erreur DNS. La solution idéale (pour le cas où l'on serait "obligé" de placer le script inline, est d'utiliser le parametre DEFER qui lance l'exécution du script seulement une fois que l'ensemble de la page est chargée ... au lieu de retarder l'exécution par timeout) Je viens de penser à cette solution conne mais efficace (au moins sur IE7 en tout cas)
__________________
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com