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...