Manipular iframes
Si dos páginas están en el mismo dominio podemos insertar una dentro de la otra usando la etiqueta iframe
y, desde cualquiera de ellas, acceder a los datos de ambas o ejecutar funciones.
Hay dos propiedades que permiten acceder a ese contenido contentDocument
y contentWindow
que devuelven los objetos document
y window
del iframe
..
<iframe src="url_pagina" id="ejemplo"></iframe>
Si usamos un atributo id para identificarla, es sencillo acceder a ellos:
var elIFRAME = document.getElementById("ejemplo"); // es la etiqueta iframe // usando el objeto window le cambiamos el color de fondo elIFRAME.contentWindow.document.body.style.backgroundColor = "black"; // o lo podemos hacer usando el objeto document elIFRAME.contentDocument.body.style.backgroundColor = "blue"; // o podemos leer sus dimensiones: var ancho = elIFRAME.contentWindow.document.body.scrollWidth; var alto = elIFRAME.contentWindow.document.body.scrollHeight;
Supongamos que tenemos una página web cualquiera con este contenido:
<div id="contenedor"> <p onclick="cerrar();">cerrrar</p> </div> <script> var demo = 123; function cambiarCOLOR1(){ document.getElementById("contenedor").style.backgroundColor = "yellow"; } function cambiarCOLOR2(color){ document.getElementById("contenedor").style.backgroundColor = color; } function cerrar(){ parent.cerrarIFRAME(); } </script>
La guardamos con el nombre de miejemplo.html y la insertamos en nuestra página principal:
<iframe src="miejemplo.html" id="ejemplo"></iframe>
Ahora, desde la página principal, usando contentWindow
podemos ejecutar cualquier función que se encuentre en la página incrustada; por ejemplo:
var elIFRAME = document.getElementById("ejemplo"); // es la etiqueta iframe // ejecutamos una función elIFRAME.contentWindow.cambiarCOLOR1(); // ejecutamos otra función enviando un parámetro elIFRAME.contentWindow.cambiarCOLOR2("lightgray"); // leemos el valor de una variable cualquiera var dato = elIFRAME.contentWindow.demo;
Y viceversa, desde la página insertada podemos ejecutar una función que se encuentre el la página principal, utilizando parent
; así que allí le agregaremos una que permita eliminar o cerrar el iframe
:
function cerrarIFRAME(){ document.getElementById("ejemplo").outerHTML = ""; }
En el ejemplo, los botones se encuentran en la pagina principal y ejecutan las funciones del iframe
y en esta, al hacer click en cerrrar se ejecuta la función cerrarIFRAME() que está en la página principal y se elimina la etiqueta.
A simple vista parece complicado pero termina siendo muy sencillo, basta saber que desde la página donde se encuentra la etiqueta iframe
podemos ejecutar cualquier función o acceder al contenido de cualquier variable que esté en ella utilizando:
objeto.contentWindow.nombre_funcion(); objeto.contentWindow.nombre_variable;
Y desde el iframe
en si mismo, podemos ejecutar cualquier función o acceder a cualquier variable que esté en la página principal, utilizando:
parent.nombre_funcion(); parent. nombre_variable;