-- EDIT Le même jour, 15h15
Aprés des testes supplémentaires, il apparaît que le problème n'est pas tout à fait correctement exposé dans ce premier post. Le problème existe bien, mais pas tout à fait dans ces termes. Voyez le post N°3. Dans ce post, il est dit que le problème ne se pose pas si le IFRAME est chargé avec un FORM.submit où target désigne IFRAME. En fait, cela ne fonctionne pas non-plus dans ce cas là.
-- FIN DU EDIT
Bonjour,
Onload et IFRAME, c'est « tu veux ou tu veux pas ? »
Si tu veux, c'est bien, si tu veux pas, ça m'emmerde![]()
Mort de rire, mais le problème est bien réel lui. J'ai constaté ce phénomène ennuyeux sur IE6...
Soit un IFRAME, et un document qui se charge dans l'IFRAME. La proprioété onload de l'IFRAME s'est au préalable vu assigner une fonction. Voici comment les choses se déroule. Si l'IFRAME est chargé par un window.open indiquant comme cible l'IFRAME, alors l'événement onload n'est pas déclenché. Si l'IFRAME est chargé par un FORM.submit indiquant comme cible de chargement, l'IFRAME en question, alors l'événement onload sera déclenché. Si la page chargé dans l'IFRAME spécifie un attribut onload pour l'élément BODY ou un window.onload dans un fichier JavaScript attaché, alors l'événement est déclenché.
Il existe donc un cas problématique, qui est celui ou on associe un handler onload depuis l'extérieure de la page elle-même et que la page est chargé avec window.open.
Quelques exemple de code abrégé rendront ce charabiat plus parlant.
Code inclus dans page-1.html
Code inclus dans un fichier .js attaché à page-1.html
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part <IFRAME name="monIframe"></IFRAME>
On pourrait s'attendre à ce que la procédure « test » se déclenche, ... hé bien non! Il n'en est rien justement.
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 var monIframe = window.frames("monIframe"); monIframe.onload = test; function test () { alert("Le document est arrivé (cheese)"); } window.open("page-2.html", "monIframe");
Mais si on fait
et que l'on fait ensuite
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part <FORM ... name="maForm" action="page-2.html" target="monIframe"></FORM>
Là, la procédure « test » est exécutée.
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part maForm.submit();
Reprenons le premier cas, celui d'un chargement par window.open. Si on place dans page-2.html
et que l'on place dans un fichier JavaScript attaché à page-2.html
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part <BODY onLoad="test2();">...</BODY>
Là, même si on ouvre avec window.open, la procédure test2 sera exécuté.
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function test2 () { alert("Le document est arrivé (bis)"); }
Donc, quand on assigne onload à l'IFRAME depuis un script attaché à la page qui contient l'IFRAME et qu'on le charge avec window.open, le onload défini par le script attaché à la page d'appel ne sera pas déclenché.
Alors pourquoi ? Est-ce un bug ? Je l'ignore, en tous cas, je le constate ....
Bonne journée
P.S. Excusez si ça fait un peu tartine-confuse, mais je ne parviens pas à formuler le cas autrement
Partager