Frameseiten - Benachrichtigung nach vollständigem Laden
Klaus Liebler
- programmiertechnik
Hallo Forum,
ich habe hier ein Frameset, in das mehrere Seiten geladen werden. Die erste Frameseite ändert Eigenschaften von ActiveX-Controls der zweiten Seite in einer OnLoad-Prozedur. Problematisch ist, dass die Seite mit den ActiveX-Controls sehr lange braucht, um geladen zu werden. Es gibt dann natürlich Fehlermeldungen, weil die erste Frameseite auf Eigenschaften zugreift, die noch gar nicht vorhanden sind. Ich hatte ursprünglich an eine Zeitverzögerung gedacht, doch das ist keine saubere Programmierung. Gibt es ein Ereignis, mit dem ich feststellen kann, dass alle Seiten des Framesets vollständig geladen sind und ich damit dann den Datenaustausch zwischen den Seiten "freigeben" kann.
Vielen Dank!
mfg
Klaus Liebler
hi,
ich habe hier ein Frameset, in das mehrere Seiten geladen werden. Die erste Frameseite ändert Eigenschaften von ActiveX-Controls der zweiten Seite in einer OnLoad-Prozedur. Problematisch ist, dass die Seite mit den ActiveX-Controls sehr lange braucht, um geladen zu werden.
Du must periodisch pruefen, am besten mit einer Variablen, die Du onload auf true setzt.
if (top.FRAMNAME && top.FRAMNAME.VARNAME) mach_was();
else setTimeout("rufe die checkfunktion nochmal()", 500);
Btw: bei mir gibbet kein ActiveX...
hth + Gruss Joachim
Du must periodisch pruefen, am besten mit einer Variablen, die Du onload auf true setzt.
Geht schon in die richtige Richtung, danke! Bibt es da nichts, das vollständig ereignisgesteuert arbeitet?
Klaus
Moin!
Du must periodisch pruefen, am besten mit einer Variablen, die Du onload auf true setzt.
Geht schon in die richtige Richtung, danke! Bibt es da nichts, das vollständig ereignisgesteuert arbeitet?
Natürlich. Jede im Frameset geladene Seite kennt "onload". Setze also bei jeder Seite das onload-Event entsprechend. Da du in einem Frameset arbeitest, kannst du in der Frameset-Definition die Lade-Stati aller Seiten sammeln.
Frameset:
var frame1 = false;
var frame2 = false;
var frame3 = false;
In jeder Frame-Datei:
<body onload="top.frame1 = true;">
<body onload="top.frame2 = true;">
<body onload="top.frame3 = true;">
Wenn du wissen willst, ob alle Dateien geladen sind:
if (!top.frame1 && !top.frame2 && !top.frame3)
{
alert("Es sind noch nicht alle Seiten geladen");
}
else
{
// mach, was du willst
}
Du kannst es natürlich auch etwas komplexer machen: Jedes onload-Event setzt seine Variable und startet dann die gewünschte Funktion, welche zuerst mal prüft, ob schon alle Seiten geladen wurden. Wenn nein, wird abgebrochen, wenn ja, gehts los.
Der Trick dabei ist eben, die Variablen im Frameset-Fenster zu halten. Da sind sie vor Neuladen gut geschützt. Es empfiehlt sich allerdings, sollten Seiten in deinem Frameset neu geladen werden, auch onunload zu verwenden, damit die Seite sich selbst wieder sperrt:
<body onunload="top.frame1=false;">
- Sven Rautenberg