2010-03-24 16 views
5

Desidero accedere all'iframe in cui si trova la mia pagina e ridimensionarla. A proposito, lo sto facendo in javascript.Come ridimensionare un iframe all'interno della pagina contenente?

It's something like parent and height or offsetHeight.

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

E in mypage.asp io do qualcosa simile in questo modo:

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

Ma non è tutto a posto? Qualcun altro che ne sa di più?

risposta

4

Provalo se desideri ridimensionare l'iframe dalla pagina caricata nell'iframe. Sembra funzionare a livello locale almeno:

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

presumo sia la pagina e la tua iframe sono tue e hanno lo stesso "origine".

+0

il ridimensionamento è in realtà solo elem.height o elem.width. – poo

+0

Penso che l'attributo 'height' dell'elemento in realtà non sia supportato (almeno in xhtml). Cercheremo anche di cercare qualche conferma su questo. Comunque, preferisco fare lo styling tramite le regole CSS, quindi è per questo che sto manipolando questi. – npup

+0

È preferibile, in alcune circostanze, più bello aggiungere una classe css ad esso invece di scrivere negli stili in linea. Credo che dipenda da quanto "dinamico" si vuole che l'altezza sia. – npup

2

Risolverei questo utilizzando window.postMessage. Questo invia un messaggio dall'iframe alla pagina padre contenente l'iframe. Quindi puoi aggiornare l'altezza nel genitore. Cercando di impostare l'altezza dall'iframe si ottengono dei limiti di prevenzione XSS per browser davvero pessimi.

Un bell'esempio è here:

genitore:

// 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

Impressionante, che funziona molto bene, e noto che è molto compatibile con il browser, risalendo a IE8 . –

Problemi correlati