Hallo Michael
Das ursprüngliche Fenster steht also im Modus "passiv" irgendwo in Hintergrund.
Irgendwann wird das 2. Fenster nun aber seinen Fokus abgeben (wahrscheinlich geschlossen oder minimiert sein) und das 1. Fenster wieder sichtbar sein. Ich gehe davon aus, daß der Besucher keine weiteren Browser-Fenster offen haben wird - weil das Ganze eine "Anwendung" ist, keine WWW-site - deshalb sind beide Ereignisse möglicherweise (hoffentlich ...) identisch.
Spätestens im zweiten Fall, eventuell aber auch im ersten, möchte ich gerne im 1. Fenster (!) wieder einen JavaScript-Event bekommen, um meinen "Passiv-Modus" wieder auf "aktiv" zurück zu schalten.
Ich habe aber noch keinen Weg gefunden, dies elegant und benutzerfreundlich zu realisieren.
Aber wie rufe ich an dieser Stelle eine Funktion auf, die im 1. Fenster definiert ist und _dort_ etwas tun soll?
Ein kompliziertes Problem und mein Ansatz wird dir auch nur rudimentär helfen.
Ich habe ein paar Testreihen laufen lassen. Getestet habe ich dabei das Focusverhalten von top und einem einzelnen Frame.
Im Topframe notierte ich folgende Funktion:
function testc()
{
top.defaultStatus=top.defaultStatus+" k"
}
window.onfocus=testc
im Inhaltsframe:
function testc()
{
top.defaultStatus=top.defaultStatus+" j"
}
window.onfocus=testc
Dabei bin zu folgendem Ergebnis gekommen.
Sowohl IE5, NN6 und NN4 registrieren, wann das Fenster den Focus erhält. Allerdings nicht immer auf die gleiche Weise. War vorher ein Frame aktiviert, so erhält auch dieser Frame den Focus zurück, war keiner aktiviert, so erhält der Top-Frame den Focus. Es spielt dabei keine Rolle, ob der Nutzer auf das Fenster geklickt hat. Bedingung ist lediglich, dass der berühmte blaue Balken erscheint. Allerdings feuert im Netscape der Event auch, wenn auf das Dokument oder einem Verweis geklickt wird.
Dir bleibt wohl nichts anderes übrig, als jedem Frame auf den Erhalt des Focus zu überwachen. Um den kurzfristigen Focusverlust z.b. beim Click auszugleichen bietet sich folgende ungetestete Lösung an:
top.hatfocus=0
function testc()
{
if (top.hatfocus==0) {
top.hatfocus==1;
deineFunktion()
setTimeout("top.hatfocus=0",100)
}
}
Die Variable hatfocus würde ich in den Topframe packen. Das läßt sich besser referenzieren.
Ich habe hier die Variable hatfocus zeitverzögert auf Null gesetzt. Eleganter ist es, den onblur-Event zu verwenden. Auch hier gilt, Netscape feuert auch beim Klick. Außerdem, befindet im Dokument ein Formularfeld verliert das Fenster ebenfalls den Focus. Für diesen Fall ist wohl eine Sonderfallbehandlung notwendig.
Zu unterstützende Browser: Netscape 4 und 6, M$IE 5 und 6. (Mehr wäre angenehm, aber derzeit nicht notwendig.)
Hier sind sich die Browser zufällig mal einig. Keiner macht was du möchtest, ohne komplizerten Programmieraufwand. :-(
Viele liebe Grüße
Antje