2010-06-16 8 views
17

Ich versuche, einen iframe basierend auf seinem Inhalt zu verkleinern (größer oder kleiner). Nach einem Klick auf jeder Seite wird eine Methode aufgerufen, die die Größenänderung vornimmt.iframe Größenanpassung mit scrollheight in Chrom/Safari

In Chrome kann ich den iframe größer machen, aber nicht kleiner. document.body.scrollHeight ist immer der größte Wert.

Wenn also eine große Seite # iframe.height = '620px' setzt und jemand auf einen Link zu einer Seite mit weniger Inhalt klickt, bleibt scrollHeight bei 620px, anstatt zu sinken.

Was ist die richtige Vorgehensweise in Chrome/Safari?

Antwort

21

Bevor Sie nach der Höhe des Dokuments im Iframe fragen, sollten Sie die Höhe des Iframe-Objekts auf "auto" setzen. Etwas wie folgt aus:

objIframe = document.getElementById('theIframeId');  
objIframe.style.height = 'auto'; 

Und jetzt:

document.body.scrollHeight 

gibt die tatsächliche Höhe des Dokuments.

+0

Brilliant! Habe seit Tagen damit zu kämpfen! –

+2

Wenn jemand anderes auf dieses Problem stößt, habe ich für Firefox die Einstellung "document.body.scrollHeight" und für Chrome und alles andere "document.documentElement.scrollHeight" festgelegt. In meinem Beispiel wird postMessage für die Domäne verwendet 'if (isFirefox) { \t \t \t \t e.source.postMessage ('Höhe:' + document.body.scrollHeight, e.origin); \t \t \t} else { \t \t \t \t e.source.postMessage ('height:' + document.documentElement.scrollHeight, e.origin); \t \t \t} ' – nitsuj

+1

Vielen Dank für diese Antwort, ich habe es in meinem iFrame-Bibliothek enthalten https://github.com/davidjbradshaw/iframe-resizer –

9

Haben Sie stattdessen document.documentElement.scrollHeight verwendet?

+0

Dies. Dieser hat funktioniert: D – chadkouse

Verwandte Themen