2008-08-29 35 views

Respuesta

10

Esto debe establecer la altura IFRAME a la altura de su contenido:

<script type="text/javascript"> 
the_height = document.getElementById('the_iframe').contentWindow.document.body.scrollHeight; 
document.getElementById('the_iframe').height = the_height; 
</script> 

es posible que desee agregar a su scrolling="no"IFRAME para desactivar las barras de desplazamiento.

editar: Vaya, se olvidó de declarar the_height.

+4

Muy útil, aplausos. Puede valer la pena mencionar que esto no funcionará tan bien si el iframe está en un dominio diferente debido a la misma política de origen – ConroyP

0

Este fragmento de CSS debe quitar la barra de desplazamiento vertical:

body { 
    overflow-x: hidden; 
    overflow-y: hidden; 
} 

No estoy seguro todavía de tener que ocupan tanto espacio vertical, ya que necesita, pero voy a ver si no puedo entender fuera.

0

Adición de una declaración DOCTYPE al documento de origen IFRAME le ayudará a calcular el valor correcto de la línea

document.getElementById('the_iframe').contentWindow.document.body.scrollHeight 

ver W3C DOCTYPE for examples

que estaba teniendo problemas con IE y FF, ya que estaba prestando la iframe documento en modo 'peculiaridades', hasta que agregué el DOCTYPE.

Compatibilidad con FF/IE/Chrome: .scrollHeight no funciona con Chrome, así que he creado un ejemplo de javascript que usa jQuery para establecer todas las alturas IFRAME en una página según el contenido de iframes. NOTA: Esto es para páginas de referencia dentro de su dominio actual.

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('iframe').each(function(){ 
      var context = $(this); 
      context.load(function(event){ // attach the onload event to the iframe 
       var body = $(this.contentWindow.document).find('body'); 
       if (body.length > 0 && $(body).find('*').length > 0) { // check if iframe has contents 
        context.height($(body.get(0)).height() + 20); 
       } else { 
        context.hide(); // hide iframes with no contents 
       } 
      }); 
     }); 
    }); 
</script> 
0

La solución no es utilizar y el código de preproceso en el lado del servidor.

+2

Esto no siempre es posible, a menos que vaya a construir un servidor proxy personalizado que vuelva a escribir enlaces en el html body ... que es una broma. – ErikE

Cuestiones relacionadas