Estoy cargando una página web aspx en un iframe. El contenido en el iframe puede ser más alto que la altura del iframe. El iframe no debe tener barras de desplazamiento.
Tengo una div
etiqueta de contenedor dentro del iframe que básicamente es todo el contenido. Escribí algo de jQuery para que el cambio de tamaño suceda:
$("#TB_window", window.parent.document).height($("body").height() + 50);
¿Dónde
TB_window
está el div en el que Iframe
está contenido?
body
- la etiqueta del cuerpo del aspx en el iframe.
Este script se adjunta al contenido del iframe. Estoy obteniendo el TB_window
elemento de la página principal. Si bien esto funciona bien en Chrome, pero la ventana TB_ se derrumba en Firefox. Estoy realmente confundido / perdido sobre por qué sucede eso.
javascript
jquery
asp.net
iframe
karry
fuente
fuente
Respuestas:
Puede recuperar la altura del
IFRAME
contenido de 's utilizando:contentWindow.document.body.scrollHeight
Después de que
IFRAME
se cargue, puede cambiar la altura haciendo lo siguiente:Luego, en la
IFRAME
etiqueta, conecta el controlador de esta manera:Tuve una situación hace un tiempo en la que además necesitaba llamar
iframeLoaded
desde elIFRAME
mismo después de que ocurriera un envío de formulario. Puede lograrlo haciendo lo siguiente dentro de losIFRAME
scripts de contenido de:fuente
X-FRAME-OPTIONS
agregar una línea como:Response.AddHeader("X-FRAME-OPTIONS", "SAMEORIGIN");
oresponse.addHeader("X-FRAME-OPTIONS", "Allow-From https://some.othersite.com");
iFrameID.height = "";
aiFrameID.height = "20px";
. La altura predeterminada del iframe del navegador es de 150 px, que es a lo que se""
restablece.Una respuesta ligeramente mejorada para Aristos ...
Luego declare en su iframe de la siguiente manera:
Hay dos mejoras menores:
iframe.height = ""
si va a reasignarlo en la siguiente declaración. Hacerlo en realidad incurre en una sobrecarga ya que se trata de un elemento DOM.Editar: si el contenido en el marco siempre está cambiando, llame al:
desde dentro del iframe después de la actualización. Funciona para el mismo origen.
O para detectar automáticamente:
fuente
function resizeIframe(iframe) { var size=iframe.contentWindow.document.body.scrollHeight; var size_new=size+20; iframe.height = size_new + "px"; }
Descubrí que la respuesta aceptada no era suficiente, ya que X-FRAME-OPTIONS: Allow-From no es compatible con Safari o Chrome . En su lugar, se utilizó un enfoque diferente, que se encuentra en una presentación dada por Ben Vinegar de Disqus. La idea es agregar un detector de eventos a la ventana principal y luego, dentro del iframe, usar window.postMessage para enviar un evento al principal diciéndole que haga algo (cambiar el tamaño del iframe).
Entonces, en el documento principal, agregue un detector de eventos:
Y dentro del iframe, escriba una función para publicar el mensaje:
Finalmente, dentro del iframe, agregue un onLoad a la etiqueta del cuerpo para activar la función de cambio de tamaño:
fuente
setInterval(resize, 1000);
Agregue esto al iframe, esto funcionó para mí:
Y si usa jQuery intente este código:
fuente
Hay cuatro propiedades diferentes que puede ver para obtener la altura del contenido en un iFrame.
Lamentablemente, todos pueden dar diferentes respuestas y estas son inconsistentes entre los navegadores. Si establece el margen del cuerpo en 0, entonces
document.body.offsetHeight
da la mejor respuesta. Para obtener el valor correcto, pruebe esta función; que se toma de la biblioteca iframe-resizer que también se encarga de mantener el iFrame del tamaño correcto cuando cambia el contenido o se cambia el tamaño del navegador.fuente
Otras respuestas no funcionaban para mí, así que hice algunos cambios. Espero que esto ayude
fuente
En lugar de usar javscript / jquery, la forma más fácil que encontré es:
Aquí 1vh = 1% de la altura de la ventana del navegador. Entonces, el valor teórico de la altura a establecer es 100vh pero prácticamente 98vh hizo la magia.
fuente
Por si acaso esto ayuda a alguien. Me estaba arrancando el pelo tratando de hacer que esto funcionara, luego noté que el iframe tenía una entrada de clase con altura: 100%. Cuando eliminé esto, todo funcionó como se esperaba. Por lo tanto, compruebe si hay conflictos de CSS.
fuente
también puede agregar un requestAnimationFrame repetido a su resizeIframe (por ejemplo, desde la respuesta de @ BlueFish) que siempre se llamaría antes de que el navegador pintara el diseño y podría actualizar la altura del iframe cuando su contenido haya cambiado sus alturas. por ejemplo, formularios de entrada, contenido cargado perezoso, etc.
su devolución de llamada debe ser lo suficientemente rápida como para no tener un gran impacto en su rendimiento general
fuente
Uncaught TypeError: Cannot read property 'scrollHeight' of null
ya quebody
esnull
, sin embargo, generalmente funciona.Puede consultar la pregunta relacionada aquí: ¿Cómo hacer que el ancho y la altura del iframe sean iguales a su div principal?
Para establecer la altura dinámica:
Y códigos: https://gist.github.com/mohandere/a2e67971858ee2c3999d62e3843889a8
fuente
Estoy usando jQuery y el siguiente código funciona para mí,
fuente
Encontré que la respuesta de Troya no funcionaba. Este es el mismo código modificado para ajax:
fuente
Para agregar al trozo de ventana que parece estar cortado en la parte inferior, especialmente cuando no tienes desplazamiento, usé:
fuente
Este es útil cuando necesita una solución sin jquery. En ese caso, intente agregar un contenedor y establecer un relleno en porcentajes
Código de ejemplo HTML:
Código de ejemplo CSS:
fuente
La solución simple es medir el ancho y la altura del área de contenido y luego usar esas medidas para calcular el porcentaje de relleno inferior.
En este caso, las medidas son 1680 x 720 px, por lo que el relleno en la parte inferior es 720/1680 = 0,43 * 100, lo que equivale al 43%.
fuente
Una respuesta ligeramente mejorada a BlueFish ...
Esto toma en consideración la altura de la pantalla de Windows (navegador, teléfono) que es buena para el diseño receptivo y los iframes que tienen una altura enorme. El relleno representa el relleno que desea encima y debajo del iframe en caso de que atraviese toda la pantalla.
fuente
fuente
Muestra usando PHP htmlspecialchars () + verifica si la altura existe y es> 0:
fuente
simplemente haga la posición del contenedor de iframe: absoluto e iframe cambiará automáticamente su altura de acuerdo con su contenido
fuente
y / o
Consulte la pregunta sobre desbordamiento de pila Cómo obtener la altura de un elemento del cuerpo .
Pruebe esto para encontrar la altura del cuerpo en jQuery:
No tiene valor si Firebug . Quizás ese sea el problema.
fuente