Hallo,
Gibt es eine möglichkeit dieses onload direkt mit in das javascript reinzuschreiben?
Ja, gibt es. Warum kein Stammposter es schafft, diese Möglichkeit in 14 Postings zu nennen, kapiere ich nicht.
window.onload = init;
function init () {
iframe = document.getElementById("iframe");
iframe.onload = load_handler;
}
function load_handler () {
var iframe_document = window.frames.iframe.document;
iframe.style.height = (iframe_document.getElementById("inhalt").offsetHeight + 20) + "px";
}
Die Funktion init wird aufgerufen, wenn das Dokument mit dem iframe fertig geladen ist. Dann wird die Funktion load_handler als Handler für den Event load am iframe-Element registriert.
Wird jetzt ein neues Dokument in den iframe geladen, wird die Funktion load_handler ausgeführt.
Mögliches Problem: Beim ersten Laden des Dokuments feuert der load-Event erst, wenn auch der Inhalt des iframes schon fertig geladen ist. init() wird dann gestartet, vergibt den Handler, aber der load-Event beim iframe ist ja schon vorüber. Also findet keine Anpassung der Höhe statt.
Deshalb müsste man load_handler() in init() noch einmal von Hand aufrufen:
window.onload = init;
function init () {
iframe = document.getElementById("iframe");
iframe.onload = load_handler;
load_handler();
}
function load_handler () {
var iframe_document = window.frames.iframe.document;
iframe.style.height = (iframe_document.getElementById("inhalt").offsetHeight + 20) + "px";
}
Ich hab schon sachen versucht wie frames(iframe).document.onload = anpassen()...
Das sollte eigentlich auch gehen - ohne die () hinter dem Funktionsnamen!
Das Registrieren von Event-Handler-Funktionen musst du dir so vorstellen: Win Funktionsobjekt wird in die Eigenschaft namens onereignis (onclick, onload usw.) kopiert.
Schema:
Elementknoten.onereignis = handlerfunktion;
Oben konkret:
iframe.onload = load_handler;
Dabei darf die Handler-Funktion nicht aufgerufen werden. Sie wird nur mit dem Namen angesprochen. handlerfunktion() würde sie aufrufen und in der Eigenschaft onereignis würde der Rückgabewert der Funktion gespeichert (da die Funktion nichts zurückgibt, undefined).
Nach dieser Zuweisung wurde das Funktionsobjekt kopiert. In Elementknoten.onereignis befindet sich also nun eine Kopie der Funktion. Diese wird aufgerufen, wenn das Ereignis passiert.
(Funktionen sind wie gesagt auch Objekte, die einfach an gewissen anderen Objekten hängen. Globale Funktionen sind also Unterobjekte bzw. Eigenschaften von window. Man könnte auch schreiben: Elementknoten.onereignis = window.handlerfunktion;)
Mathias