molily: Iframe-Höhe dynamische anpassen.

Beitrag lesen

Hallo,

document.getElementById('iframe').style.height = frames['iframe'].document.getElementById('inhalt').offsetHeight + 'px';

Warum verwendest du hier zwei unterschiedliche Notationen zum Zugriff auf das gleiche Element?

Da irrst du dich, diese Notationen greifen nicht auf dasselbe Objekt zu.

document.getElementById('iframe') liefert einen Elementknoten, soweit korrekt. Die Frage war: Wie kommt man jetzt vom Elementknoten zum Dokument darin? Die Lösung ist erst einmal nicht relevant, es kann nur festgestellt werden, dass frames['iframe'] etwas anderes anspricht als document.getElementById('iframe').

Während document.getElementById('iframe') den Elementknoten liefert, liefert frames['iframe'] nämlich das window-Element des Dokuments im Iframe (jedes Fenster bzw. jeder Frame und Iframe hat bekanntlich ein eigenes window-Objekt). Das ist etwas völlig anderes. document.getElementById('iframe').style funktioniert, frames['iframe'].style würde nicht funktionieren. frames['iframe'].document funktioniert, document.getElementById('iframe').document würde nicht funktionieren. Insofern ist obiger Code durchaus sinnig.

Trotzdem hast du recht, hier liegt eine ziemliche Vermischung vor. Der Pseudo-Array window.frames speichert die window-Referenzen, er kommt aus Netscapes JavaScript und kommt im W3C-DOM nicht vor (dort gibt es kein »window«, weil das DOM keine Ausführungsumgebung definiert). getElementById kommt hingegen nicht im klassischen JavaScript vor, dort spielen iframe-Elementknoten keine Rolle.

Trotzdem gibt es eine Verknüpfung zwischen DOM und dem Dokument im iframe: contentDocument.

Man könnte also schreiben:

var elem_iframe = document.getElementById('iframe');  
elem_iframe.style.height = elem_iframe.contentDocument.getElementById('inhalt').offsetHeight + 'px';

Das unterstützen meines Wissens aber nur einige Browser.

MSIE bietet zudem eine proprietäre Eigenschaft, mit der man vom Elementknoten zum window-Objekt kommt: contentWindow. Zumindest Gecko kennt diese auch.

Mathias