Javascript: Communication entre deux IFRAME

Fermé
mick007 - 25 juil. 2009 à 00:46
 mick007 - 25 juil. 2009 à 18:08
Bonsoir,

Voici mon problème:
Disons qu'on ait une page Internet dans laquelle se trouve deux DIV et un bouton. Chacune des DIV contient une IFRAME. A la suite d'un clique sur le bouton, une page est chargé dans une des deux IFRAME.
Le code très simplifié pourrait ressembler à ceci:

<HEAD>
<SCRIPT>
function put_in_div1()
{
document.getElementById("ifr1").src = "test.html";
}
</SCRIPT>
</HEAD>

<BODY>
<DIV id="div1" name="div1">
<IFRAME id="ifr1" name="ifr1">
</DIV>
<DIV id="div2" name="div2">
<IFRAME id="ifr2" name="ifr2">
</DIV>
<INPUT type="button" onClick="put_in_div1()">
</BODY>

Jusque là, rien d'extraordinnaire. L'avantage des DIV me permet de placer l'IFRAME là où je veux, et l'avantage de l'IFRAME me permet de charger n'importe quelle page à l'intérieur (La fonction innerHTML souvent associée aux DIV ne supporte que très difficilement le JavaScript!).

Maintenant, compliquons un peu les choses. Disons que test.html contienne du code qui prend un certain temps à être exécuté, et qu'à la fin, pour prévenir l'utilisateur que c'est terminé, lance dans l'IFRAME 2 (ifr2) un second script ("test_fin.html").
La question est alors: Mais comment faire pour atteindre la seconde frame à partir de la première ?

J'ai essayé plusieurs commandes essentiellement basées sur des window.parent.document.getElementById("ifr2").src ou encore window.parent.document.getElementById("IFRAME")[1].src, mais rien ne marche!!
Le pire, c'est que j'arrive à accéder au DIV2, mais qu'il n'a aucun "child", ce qui fait que la propriété childNodes return un tableau vide!


Quelqu'un aurait-il un meilleur idée ? :D

Merci

2 réponses

dreamfeeder Messages postés 253 Date d'inscription samedi 24 novembre 2007 Statut Membre Dernière intervention 25 juillet 2009 54
25 juil. 2009 à 16:27
window.parent.document.getElementById("ifr2").src="test_fin.html" fonctionne chez moi en tout cas.

le probleme doit venir d'ailleurs.

par contre pense à bien fermer ta balise <iframe></iframe> ;-)
0
Salut dreamfeeder,

Merci pour ton intervention et mes essais que tu as faits. La chose à laquelle je fais attention quand je crée un site, c'est à la portabilité du code, de sorte à ce que tout le monde (ou du moins le maximum de personne) puisse accéder au site sans rencontrer de soucis. C'est pour cette raison que j'utilise souvent des méthodes basiques et tente de "ré-inventer la roue" à partir de ces dernières.

Dans mon cas, j'ai trouvé une solution élégante qui passe partout. Il suffisait en fait de créer un DIV vide. Et comme je pouvais avoir accès au second DIV (Et non pas à l'IFRAME contenu à l'intérieur), il me suffisait de créer l'IFRAME à la volée et de l'insérer dans le DIV.

Mickaël
0