hola estoy haciendo una web donde uso un iframe y cuando cargo las secciones estas tienen en el body onload el llamado a una funcion calcula que es la siguiente:

Código Javascript :

<script type="text/javascript">

function calcula(){
   if (window.innerHeight){ 
      parent.cambiarAltura(document.body.clientHeight);
      //navegadores basados en mozilla 
   }else{ 
      if (document.body.clientHeight){ 
         alert("Navegadores basados en IExplorer, es que no tengo innerheight ");
         parent.cambiarAltura(document.body.clientHeight);
      }else{ 
         alert("otros navegadores");
         parent.cambiarAltura(700);
      } 
   } 
}

</script>


esta llama a la funcion cambiaAltura y le manda la altura de la misma y dicha funcion es la siguiente:


Código Javascript :

<script type="text/javascript">

function cambiarAltura(cambia){   
   if (cambia <400){
      document.getElementById("myIframe").height = 400;
   }else{
      document.getElementById("myIframe").height=cambia+30;
   }
}

</script>


la duda es la siguiente no entiendo porque con document.body.clientHeight en sitios basados en mozilla como el mismo firefox safari me funciona ese codigo ya que por lo que se no lo soportan.
y despues no entiendo porque en opera no me funciona.
si alguien me puede ayudar a como calcular la altura de la tabla cuando carga en el iframe.
Saludos