2016-04-14 3 views
1

Ich habe ein beforeunload Handler, dass aufgerufen wird, wenn der Benutzer von der Seite tatsächlich navigiert:überspringen beforeunload Handler, wenn der Benutzer auf Seite bleibt aufgrund Dialog innerhalb des zweiten Handler

$(window).on("beforeunload", function() { 
    cleanup(); 
}); 

Ein weiterer Teil meiner Anwendung könnte jedoch fügen Sie eine weitere beforeunload Handler, die den Benutzer fragt, ob er wirklich wegen eines laufenden Betrieb verlassen will:

$(window).on("beforeunload", function() { 
    return "Do you really want to leave"; 
}); 

Wie kann ich versichern, dass der zweite Handler wird immer zuerst genannt werden, und dass der erste Handler wird nicht wenn der Benutzer sich für s entscheidet Tay auf der Seite?

Ich habe bereits versucht, stattdessen das Ereignis unload zu verwenden. Aber das funktioniert nicht, da es meine Aufräumfunktion und den Backend-Aufruf innerhalb dieser Funktion nicht zuverlässig ausführen wird.

+1

Versuchen Sie Folgendes: http://stackoverflow.com/questions/17759703/is-there-any-way-to-detect-if-user-pressed-stay-on-page-or-leave -page-in-bef –

+0

@IsmaelMiguel Danke, aber keine der Antworten in dieser Frage funktioniert in meinem Fall. Ich kann keine Zeitüberschreitung verwenden, da ich beim Verlassen des Benutzers etwas tun muss, nicht wenn er bleibt. Außerdem kann ich 'unload' nicht verwenden, da es einen Backend-Aufruf in meiner Bereinigungsfunktion ausführen muss und" Entladen "verwendet. Dieser Aufruf wird manchmal nicht ausgeführt. – basilikum

+0

Sie haben Recht. Diese Anforderungen sind tatsächlich unterschiedlich. Habe es nicht bemerkt. Es tut mir wirklich leid. –

Antwort

1

Sie können window.confirm für den Fall verwenden. Wie in (Pseudo-Code)

Auf diese Weise, wenn der Benutzer beenden will, wird es bereinigen. Funktioniert das?>

+0

Danke aber wie gesagt, ich muss verschiedene Handler haben, ergänzt um zwei verschiedene Teile meiner Bewerbung und ich möchte die Dinge getrennt halten. Die Frage war also, ob ich irgendwie die Reihenfolge sicherstellen kann, in der diese Handler aufgerufen werden und alle nachfolgenden Handler verhindern, wenn der Benutzer entscheidet, während des Dialogs in einem bestimmten Handler zu bleiben. – basilikum

+0

Also, beim Entladen wird es standardmäßig bereinigen? Und Sie möchten einen separaten Handler für die Navigation durch den Benutzer, nur wenn der Benutzer gerade etwas tut? –

+0

Ja, Cleanup sollte durchgeführt werden, wenn der Benutzer tatsächlich verlässt, also technisch beim Entladen. Das Entladeereignis scheint jedoch nicht so zuverlässig zu sein, also muss ich vor dem Entladen verwenden. Ein Teil meiner App startet möglicherweise eine Audioaufnahme und fragt den Benutzer, ob er wirklich gehen möchte, wenn er gerade etwas aufnimmt. Wenn er sich dann entscheidet zu bleiben, sollte eine globale Säuberung nicht aufgerufen werden. – basilikum