martes, 26 de enero de 2010

Accediendo a los objetos IFRAME con Javascript

Los iframes son muy útiles a la hora de incluir una página dentro de otra. En ocasiones la comunicación entre ellos es indispensable. Para ello contamos con javascript:

- Desde la página contenida en el iframe, con parent accedemos al objeto window de la página que lo contiene. De esta forma podemos hacer cosas como llamar a funciones y usar propiedades:
parent.miFuncion();
parent.document.getElementById('miId');
parent.location.href = 'miWeb.html';
- Desde la página que contiene el iframe también podemos acceder al objeto window de la página del iframe, con la propiedad contentWindow. Así podemos hacer cosas cómo:
document.getElementById('myIframe').contentWindow.miFunction();
document.getElementById('myIframe').contentWindow.document.getElementById('myId');

Una vez tuve que hacer una web que contenía un iframe oculto que, cuando se mostraba, el iframe contenía la misma página que, a su vez, al ser la misma página, contenía un iframe oculto que al mostrarse se mostraba a si misma... así hasta el infinito :) Pues bien, para acceder al objeto window de la página del iframe más "interno", esto es, el último abierto, hice esta sencilla función (usa prototype):
function getInnerMostIframeWindow(){
    var theWindow = window;
    while(theWindow.$('myIframe').visible())
        theWindow = theWindow.$('myIframe').contentWindow;

    return theWindow;
}

No hay comentarios:

Publicar un comentario