Hallo Mathias,
Warum ist das Klonen nötig?
Und warum nicht scrollHeight?
Mein Hauptaugenmerk lag auf FF2, IE6, IE7, Safari 3.0.4 und Opera 9.24.
Bezüglich Klonen mal eine Resize-Funktion ohne Klonen:
function resizeIframe (ifr_id) // Kein Klonen
{
var ifr = document.getElementById(ifr_id);
ifr.scrolling='no';
ifr.height=ifr.contentWindow.document.body.offsetHeight;
}
Das ursprüngliche Element scrollt bei Bedarf für Benutzer, die Javascript ausgeschaltet haben. Bei der Javascript-Größenänderung bleibt der Scrollbalken bei IE6, IE7, Safari und Opera. Bei Erhöhung von height um 35 verschwindet der Scrollbalken zwar bei IE6/7 und Safari, bleibt aber immer noch bei Opera. Auch ein ifr.style.height hilft da nicht. Bei Opera verschwindet der Scroll-Balken erst, wenn man ifr.scroll='no' angibt. Das ist aber nicht DOM-gerecht und bei den anderen erscheint der Scrollbalken dann wieder, wenn man die 35 weglässt. Im übrigen ist mir unklar, wie der Wert 35 berechnet wird. Darüberhinaus hinaus könnte man statt Klonen auch einen völlig neuen Iframe aufbauen (document.createElement) und diesen z. B. eine andere Seite laden lassen.
Zu offsetHeight: Mein Beispiel gibt ja die verschiedenen Höhenwerte aus. Es ergibt sich folgendes: Safari und Opera erkennen scrollHeight nicht richtig. Opera spinnt immer noch bei clientHeight. Lediglich offsetHeight wird von allen halbwegs richtig erkannt (man muss noch mindestens ein <br> an das Ende setzen).
viele grüße
ralph