Bonjour à tous,
après parcours de plusieurs forums sans succès, je viens quémander un peu d'aide.
Voici le contexte :
un clic est fait sur une image située dans une frame.
Une fonction javascript , déclenchée par ce clic créer une Iframe, puis l'ajoute ( si elle n'y existe pas déjà), au dom d'une autre frame ( du même frameset) et retourne le contenu de l'Iframe.
après celà je récupère ce contenu et je tente d'affecter des valeurs au document.body de l'iframe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 var popupFrame = document.createElement("iframe"); popupFrame.id = "popupFrame"; document.body.appendChild(popupFrame); if (document.body && !document.getElementById(popupFrame.id)) { document.body.appendChild(popupFrame); } /*Bloc de paramétrage et d'affectations de fonctions pour l'affichage de la page. */ return document.getElementById(popupFrame.id).contentWindow;
Sur cette dernière ligne, le javascript plante sous IE car le document.body est null au premier déclenchement. si après cet échec, je re clic, mon iframe se s'affiche correctement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 monPopup = createWindowPopup(); //fonction renvoyant le contenu de l'iframe. var popupBody = monPopup.document.body; popupBody.style.backgroundColor = "#FFFFFF";
j'en ai déduit que sous IE, le createlement est interrompu par le chargement de la frame de destination, ou quelque chose dans le genre.
entre la ligne de création de l'iframe, et l'utilisation de son body, l'ajout d'un bête alert('bar'); suffit à solutionner le problème, toutefois, hors de question d'avoir des alert partout à chaque clic.
la syntaxe semble bonne puisque au second clic le code fonctionne comme sur des roulettes.
hors contexte sur une page de test, pareil, ça fonctionne comme un charme.
en revanche dans le contexte IE ne veux rien savoir, et je m'arrache les cheveux.
j'ai projet de refaire ces menu en DIV plutôt qu'en iframe, mais je n'ai pas le temps de refondre tout ce qui va autour pour l'instant, je suis contraint de chercher.
j'espère avoir été suffisamment clair, merci de votre aide.
Partager