In einer Webanwendung, an der ich arbeite, erfasse ich onBeforeUnload, um den Benutzer zu fragen, ob er wirklich aussteigen möchte.
Wenn er sich entschließt, zu bleiben, gibt es eine Reihe von Dingen, die ich gerne tun würde. Was ich herauszufinden versuche, ist, dass er sich tatsächlich entschieden hat, zu bleiben.
Ich kann natürlich ein SetTimeout für "x" Sekunden deklarieren, und wenn das auslöst, dann würde es bedeuten, dass der Benutzer noch da ist (weil wir nicht entladen wurden). Das Problem ist, dass der Benutzer jede Zeit nehmen kann, um zu entscheiden, ob zu bleiben oder nicht...
Ich hatte zunächst gehofft, dass, während das Dialogfeld angezeigt wurde, SetTimeout Anrufe nicht auslösen würde, so dass ich eine Zeitüberschreitung für eine kurze Zeit festlegen könnte und es nur auslösen würde, wenn der Benutzer zu bleiben wählte. Allerdings, Zeitüberschreitungen tun auslösen, während der Dialog angezeigt wird, also funktioniert das nicht.
Eine andere Idee, die ich ausprobiert habe, ist das Erfassen von Mausbewegungen im Fenster/Dokument. Während der Dialog angezeigt wird, werden Mausbewegungen tatsächlich nicht ausgelöst, mit Ausnahme einer seltsamen Ausnahme, die wirklich auf meinen Fall zutrifft, also wird das auch nicht funktionieren.
Fällt jemandem eine andere Möglichkeit ein, dies zu tun?
Danke!
(Falls Sie neugierig sind, der Grund, warum das Erfassen von mouseMove nicht funktioniert, ist, dass ich einen IFrame in meiner Seite habe, der eine Website von einer anderen Domain enthält. Wenn zum Zeitpunkt des Entladens der Seite der Fokus innerhalb des IFrame ist, während das Dialogfeld angezeigt wird, dann bekomme ich das MouseMove-Ereignis, das EINMAL ausgelöst wird, wenn sich die Maus von innerhalb des IFrame nach außen bewegt (zumindest in Firefox). Das ist wahrscheinlich ein Fehler, aber trotzdem ist es sehr wahrscheinlich, dass das in unserem Fall passieren wird, also kann ich diese Methode nicht verwenden).