2010-03-24 15 views
5

Quiero acceder al iframe en el que está mi página y cambiar su tamaño. Por cierto, lo estoy haciendo en javascript.¿Cómo cambiar el tamaño de un iframe dentro de la página que contiene?

It's something like parent and height or offsetHeight.

<iframe src="mypage.asp" height="400" width="400" ></iframe> 

Y en MiPágina.asp que hacer algo similar como esto:

var h = // new height; 
parent.height = h; 

Pero no es todo ¿verdad? ¿Alguien más que sabe más?

Respuesta

4

Pruebe esto si quiere cambiar el tamaño del iframe desde la página que está cargada en su iframe. Parece que funciona localmente al menos:

function doIt() { 
    var elem = window.parent.document.getElementById('myIframe'); // the id of your iframe of course 
    elem.style.height = '40em'; 
} 

Asumo tanto la página como el marco flotante son los suyos y tienen el mismo "origen".

+0

el cambio de tamaño es en realidad sólo elem.height o elem.width. – poo

+0

Creo que el atributo 'height' del elemento en realidad no es compatible (en xhtml al menos). Intentaremos también buscar alguna confirmación sobre eso. De todos modos, prefiero hacer el diseño a través de las reglas de CSS, así que es por eso que estoy manipulando estos. – npup

+0

Podría decirse que en algunas circunstancias es más agradable agregarle una clase css en lugar de escribir en los estilos en línea. Supongo que depende de cuán "dinámico" uno quiera que sea la altura. – npup

2

Resolvería esto usando window.postMessage. Esto envía un mensaje del iframe a la página principal que contiene el iframe. Luego puede actualizar la altura en el padre. Intentar establecer la altura desde dentro del iframe ofrece unas limitaciones de prevención del XSS del navegador realmente desagradables.

Un buen ejemplo es here:

padres:

// Every two seconds.... 
setInterval(function() { 
    // Send the message "Hello" to the parent window 
    // ...if the domain is still "davidwalsh.name" 
    parent.postMessage("Hello","http://davidwalsh.name"); 
},1000); 

iframe:

// Create IE + others compatible event handler 
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; 
var eventer = window[eventMethod]; 
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; 

// Listen to message from child window 
eventer(messageEvent,function(e) { 
    console.log('parent received message!: ',e.data); 
},false); 
+0

Impresionante, eso funciona muy bien, y noto que es muy compatible con el navegador, camino de regreso a IE8 . –

Cuestiones relacionadas