• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Nach Bestätigung von window.onbeforeunload -> return eine Funktion ausführen

MaconOx

New member
Hallo Zusammen,

ich habe ein recht einfaches Problem, was ich jetzt jedoch nach einiger Zeit Recherche nicht wirklich lösen konnte.

Hier das Szenario:
Der User schließt über das rote X am rechten oberen Eck den Browser. Vorher soll eine Abfrage kommen, ob er wirklich die Seite verlassen möchte.
Quittiert er diese mit nein, bleibt er auf der Seite. Wenn er auf Ja klickt, muss anschließend eine Funktion ausgeführt werden.


Die Abfrage ist mit dem Event onBeforeUnload kein Problem, nur wie bekomme ich es hin, dass ich anschließend noch eine Funktion ausführen kann?
Ich habe auch bereits das Event onUnload in betracht gezogen, aber nachdem die Abfrage mit Ja abgeschlossen wird, wird dieses Event onUnLoad bei mir ignoriert. (Mit dem Chrome Debugger)

Hier mal ein Beispielcode:

HTML:
<script type="text/javascript">

function onBeforeUnload(){
	return "hiermit wird der Chat und die Verbindung zum Agenten geschlossen!"
}

function onunload(){
	Method_To_Do();
}

window.onbeforeunload = onBeforeUnload;
window.onunload = onunload;

</script>

Dieselbe Funktion (Seite Verlassen) soll dem User auch über einen Button bereitgestellt werden. Dies funktioniert bei mir auch und das habe ich über ein confirm gelöst.
Der Befehl confirm funktioniert jedoch nicht wenn ich das Fenster über das X beende, da wie ich gelesen habe der beim Event onBeforeUnload ignoriert wird.

HTML:
var isclosed = false;

function beenden ()
{
	if(Check != true) {
		if(!isclosed){
			Check = confirm("Wollen Sie den Dialog wirklich beenden?");
		}else{ Check == true;}
	}
	if (Check == true) {
		dropButton_Click();
		top.window.close();
	}
}

Vllt. kann mir hier jemand kurz unter die Arme greifen.

mit freundlichen Grüßen
Max
 
Zuletzt bearbeitet von einem Moderator:
Könntest du bitte nochmal genau erklären, was du jetzt möchtest / was nicht funktioniert?

PS: warum so umständlich?
Code:
function onunload(){
Method_To_Do();
}

window.onbeforeunload = onBeforeUnload;
window.onunload = onunload;
Das geht viel kürzer:
Code:
window.onunload = Method_To_Do;
PPS: du solltest Variablennamen wie "onunload" vermeiden!
PPPS: normalerweise werden Funktionsnamen in JavaScript zusammen und in CamelCase geschrieben (z.B. "MethodToDo()"). Wenn du dich schon für eine andere Benennung entscheidest, solltest du wenigstens auch konsistent bei dieser bleiben...
PPPPS: längeren Code bitte in
Code:
-Tags setzen, nicht in [inline].
 
Hallo Julian,

Danke für die schnelle Antwort.
Deine Ratschläge werde ich versuchen anzuwenden.

Ich möchte nur, dass nach dem return im Event onBeforeUnload eine Funktion ausgeführt wird, wenn der User auf "Ja" -> Seite beenden klickt.
 
Keine Ahnung ob das mit diesem Event so geht? Habe irgendwas im Kopf, dass das onbeforeunload keinen Callback hat und eigentlich für eine Art Warnung gedacht war/ist!?

Vielleicht kann man aber das Event abbrechen und was eigenes ausführen, ungefähr so:
Code:
window.onbeforeunload = function(event) {
	event.preventDefault();
	event.stopImmediatePropagation();
	event.stopPropagation();

	// Confirm oder eigene Dialogbox
};
 
Ich habe es gerade selbst ausprobiert: es ist tatsächlich so, dass einige Dinge wie alert() im onbeforeunload-Event nicht funktionieren:
HTML:
<div id="status"></div>

<script>
window.onbeforeunload = function(){
  functionWithAlert();
  otherFunction();
  return "Wirklich beenden?";
};
function functionWithAlert(){ //klappt nicht
  alert("Alert");
}
function otherFunction() { //klappt
document.getElementById("status").innerHTML = "called";
}
</script>
 
Wenn ich das jetzt richtig verstehe, ist es so, dass die einzige Möglichkeit dem User eine DialogBox beim Schließen des Tabs/Fensters anzuzeigen, über das return im Event onBeforeUnload gegeben ist. Anschließend kann dann nichts mehr gemacht werden?

Aus dem Grund habe ich mir gedacht, die Abfrage quasi über das onBeforeUnload Event anzuzeigen und danach evtl. auf das onUnload Event zu hören, in welchem ich dann die Funktion ausführe. Problem hier ist bei mir jedoch, dass das Event onUnload irgendwie übersprungen wird. (Es schließt sich einfach das Fenster, anstelle nochmal in den Chrome Debugger zu diesem Event zu springen)

Gibts da vllt. noch andere Möglichkeiten?
 
Was soll denn genau in den onunload ausgeführt werden. Manche Dinge (z.B. alert oder AJAX) kann man da einfach nicht machen, da ja der Browser geschlossen bzw. die Seite gewechselt werden soll.

Ich habe den starken Verdacht, dass dein Anliegen nicht möglich ist. Aber beschreib' doch mal in Detail, was deine Problemstellung ist.
 
Zurück
Oben