Probé algunas soluciones pero no tuve éxito. Me pregunto si existe una solución preferiblemente con un tutorial fácil de seguir.
iframe
cross-domain
J82
fuente
fuente
Respuestas:
Tienes tres alternativas:
1. Utilice iFrame-resizer
Esta es una biblioteca simple para mantener los iFrames del tamaño de su contenido. Utiliza las API PostMessage y MutationObserver, con alternativas para IE8-10. También tiene opciones para que la página de contenido solicite que el iFrame que lo contiene tenga un tamaño determinado y también puede cerrar el iFrame cuando haya terminado.
https://github.com/davidjbradshaw/iframe-resizer
2. Utilice Easy XDM (combo PostMessage + Flash)
Easy XDM utiliza una colección de trucos para habilitar la comunicación entre dominios entre diferentes ventanas en varios navegadores, y hay ejemplos para usarlo para cambiar el tamaño de iframe:
http://easyxdm.net/wp/2010/03/17/resize-iframe-based-on-content/
http://kinsey.no/blog/index.php/2010/02/19/resizing-iframes-using-easyxdm/
Easy XDM funciona mediante el uso de PostMessage en los navegadores modernos y una solución basada en Flash como respaldo para los navegadores más antiguos.
Vea también este hilo en Stackoverflow (también hay otros, esta es una pregunta común). Además, Facebook parece utilizar un enfoque similar .
3. Comunicarse a través de un servidor
Otra opción sería enviar la altura del iframe a su servidor y luego sondear desde ese servidor desde la página web principal con JSONP (o usar una encuesta larga si es posible).
fuente
Obtuve la solución para configurar la altura del iframe de forma dinámica en función de su contenido. Esto funciona para el contenido multidominio. Hay algunos pasos a seguir para lograrlo.
Suponga que ha agregado un iframe en la página web "abc.com/page"
<div> <iframe id="IframeId" src="http://xyz.pqr/contactpage" style="width:100%;" onload="setIframeHeight(this)"></iframe> </div>
A continuación, debe vincular el evento "mensaje" de Windows en la página web "abc.com/page"
En la carga del iframe, debe enviar un mensaje al contenido de la ventana del iframe con el mensaje "FrameHeight":
fuente
Lo que hice fue comparar el iframe scrollWidth hasta que cambió de tamaño mientras establecía de forma incremental la altura del iframe. Y funcionó bien para mí. Puede ajustar el incremento a lo que desee.
fuente
Tengo un script que cae en el iframe con su contenido. También se asegura de que exista iFrameResizer (lo inyecta como un script) y luego realiza el cambio de tamaño.
Incluiré un ejemplo simplificado a continuación.
Luego, el contenido del iframe se puede inyectar en cualquier lugar dentro de otra página / sitio usando el script así:
El contenido del iframe se inyectará debajo donde coloque la etiqueta de secuencia de comandos.
Espero que esto sea útil para alguien. 👍
fuente
<script ... data-src="http://google.com">
y llené el iframe src con él.[email protected]
Aquí está mi solución simple en esta página. http://lab.ohshiftlabs.com/iframesize/
Así es como funciona;
Básicamente, si puede editar la página en otro dominio, puede colocar otra página iframe que pertenezca a su servidor, lo que ahorra altura para las cookies. Con un intervalo de lectura de cookies cuando se actualiza, actualiza la altura del iframe. Eso es todo.
Descargar; http://lab.ohshiftlabs.com/iframesize/iframesizepost.zip
Edición: diciembre de 2019
Básicamente, la solución anterior utiliza otro iframe dentro de un iframe. Pero no es una buena solución, por lo que debe seguir esta:
En la página principal:
Aquí puedes comprobar
m.origin
de dónde viene.En la página del marco:
Aunque, no olvide que esta no es una forma tan segura. Para hacerlo seguro, actualice * valor (targetOrigin) con el valor deseado. Siga la documentación: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
fuente
Encontré otra solución del lado del servidor para desarrolladores web que usan PHP para obtener el tamaño de un iframe.
Primero está usando el script PHP del servidor para una llamada externa a través de una función interna: (como
file_get_contents
con pero curl y dom).Necesita mostrar debajo de div (
iframe_reserve
) el html generado por la llamada a la función usando un simpleecho curl_get_file_contents("location url iframe","activation proxy")
Después de hacer esto, una función de evento de cuerpo onload con javascript toma la altura del iframe de la página solo con un simple control del contenido div (
iframe_reserve
)Así que solía
divHeight = document.getElementById("iframe_reserve").clientHeight;
obtener la altura de la página externa a la que vamos a llamar después de enmascarar el contenedor div (iframe_reserve
). Después de esto cargamos el iframe con su buena altura eso es todo.fuente
Me encontré con este problema mientras trabajaba en algo en el trabajo (usando React). Básicamente, tenemos contenido html externo que guardamos en nuestra tabla de documentos en la base de datos y luego insertamos en la página bajo ciertas circunstancias cuando estás en el conjunto de datos de Documentos.
Entonces, dadas las
n
líneas, de las cuales hastan
podrían contener html externo, necesitábamos diseñar un sistema para cambiar automáticamente el tamaño del iframe de cada línea una vez que el contenido esté completamente cargado en cada una. Después de girar un poco mis ruedas, así es como terminé haciéndolo:message
detector de eventos en el índice de nuestra aplicación React que verifique una clave específica que estableceremos desde el iframe del remitente.<script>
etiqueta que esperará a que se activen los iframewindow.onload
. Una vez que se activa, usamospostMessage
para enviar un mensaje a la ventana principal con información sobre la identificación del iframe, la altura calculada, etc.id
del iframe que le pasamos alMessageEvent
objetoiframe
, simplemente establezca la altura del valor que se pasa desde el iframepostMessage
.fuente