• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

onbeforeunload funktioniert nicht richtig

basti1012

Senior HTML'ler
Ich will mit Javascript das Schließen des Fensters auslesen.
Wenn einer das Fenster schließt ist er ja nicht mehr Onine und deswegen will ich beim Schießen des Fensters alle Sessions und Cookies Löschen.
Da mein Code nicht ging habe ich ihn gekürzt und mit Alert getestet ob das Event Feuert.Aber irgendwie nicht bzw mit Fehlern.

Mein Code
Javascript:
window.onbeforeunload = function () {
    alert('Rauswurf weil seite geschlossen')
};

Den Code sieht man 100 mal in Netzt und scheint ja mal funktioniert zu haben, nur ich bekomme keinen Alert und diesen Fehler
Blocked alert('Rauswurf weil seite geschlossen') during beforeunload.

Weiß da einer rat? Ist das so ein Browser problem oder was kann das sein?
Gibt es noch andere möglichkeiten das schließen oder wechseln des Fensters auszulesen ?

Habe auch im Netz Codes gefunden wo kein on vor onbeforeunload stand.Aber dann bekomme ich immer noch den gleichen Fehler
 
Werbung:
Werbung:
alert, confirm und prompt funktionieren zudem nicht in onbeforeunload.

Ok das würde erklären warum das nicht geht.Aber wie machen den die Webseitendas die beim Schließen immer ein prompt Fenster anzeigen ?
Ich brauche ja nur nee Funktion,die sollte ja dann klappen.



Anstatt Cookies den SessionStorage verwenden. Dann braucht es kein beforeunload.
Ansonsten
https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload
Kucke ich mir mal an weil mit Sessionstorage habe ich noch nie gearbeitet ,dazu kann ich jetzt gar nix sagen
 
Ok das würde erklären warum das nicht geht.Aber wie machen den die Webseitendas die beim Schließen immer ein prompt Fenster anzeigen ?
Ich brauche ja nur nee Funktion,die sollte ja dann klappen.




Kucke ich mir mal an weil mit Sessionstorage habe ich noch nie gearbeitet ,dazu kann ich jetzt gar nix sagen

Denke du musst einen String "returnen" bzw. etwas anderes als null/undefined.

Code:
return 'Sicher dass Sie das Fenster schliessen wollen?';
 
Denke du musst einen String "returnen" bzw. etwas anderes als null/undefined.

Code:
return 'Sicher dass Sie das Fenster schliessen wollen?';
Zumindest ist der Fehler jetzt weg,aber das so ein Fenster kommt mit wollen sie die Seite wirklich verlassen geht trotzdem nicht.
Leider finde ich jetzt auch keine Seite im Netzt die sowas noch hat.

Ich werde jetzt erstmal testen ob das mit der function klappt und den session Löschen.Das ist das wichtigste.Den Alert brauche ich ja nicht wirkich,aber wäre ja trozdem schön gewesen wenn ich es verstanden hätte wie es richtig geht bzw warum es bei mir nicht geht .
 
Werbung:
Zumindest ist der Fehler jetzt weg,aber das so ein Fenster kommt mit wollen sie die Seite wirklich verlassen geht trotzdem nicht.
Leider finde ich jetzt auch keine Seite im Netzt die sowas noch hat.

Ich werde jetzt erstmal testen ob das mit der function klappt und den session Löschen.Das ist das wichtigste.Den Alert brauche ich ja nicht wirkich,aber wäre ja trozdem schön gewesen wenn ich es verstanden hätte wie es richtig geht bzw warum es bei mir nicht geht .

Soeben getestet. Voraussetzung ist dass man zuvor mit der Seite interagiert hat.
Code:
window.onbeforeunload = function (e) {
    e.returnValue = 'Sicher?';
    return 'Sicher?';
};

Und der Text wird von den Browsern überschrieben.
 
Habt ihr nee Idee wie ich beim Verlassen der Seite eine Beitrag aus der Db Löschen kann
Javascript:
window.onbeforeunload = function (e) {
   // e.returnValue = 'Sicher?';
           $.ajax({
                type: "POST",
                url: "chatneu/logout.php",
                data: {login:login},
                success: function(data){

             alert(data)
                }
           });
};
Wenn einer den Chat nicht über Logout verläst bleibt er in der Liste als Online geführt. Irgendwie muß er da raus.
Deswegen hate ich mir das so gedacht nur es Funktioniert nicht.Aber das problem hatte ich ja schon das nicht mal ein Alert kommt.Hatte gehoft das wennigstens das funktioniert aber es passiert einfach gar nix
 
Habt ihr nee Idee wie ich beim Verlassen der Seite eine Beitrag aus der Db Löschen kann
Javascript:
window.onbeforeunload = function (e) {
   // e.returnValue = 'Sicher?';
           $.ajax({
                type: "POST",
                url: "chatneu/logout.php",
                data: {login:login},
                success: function(data){

             alert(data)
                }
           });
};
Wenn einer den Chat nicht über Logout verläst bleibt er in der Liste als Online geführt. Irgendwie muß er da raus.
Deswegen hate ich mir das so gedacht nur es Funktioniert nicht.Aber das problem hatte ich ja schon das nicht mal ein Alert kommt.Hatte gehoft das wennigstens das funktioniert aber es passiert einfach gar nix

Ich denke ein "async: false" sollte funktionieren.
Nur halt das alert nicht - verwende zum debuggen console.log.
 
Werbung:
@scbawik ich danke dir erstmal für deine Hilfe,aber ich komme hier nicht weiter. Egal ob ich den Tab ,oder Fenster ,oder ganzen Browser schließe,oder in der Adresszeile eine ganz andere Adresse eingebe, das onbeforeunload feuert bei mir einfach nicht. Hab es natürlich auch ohne Alert gemacht und auch mal in den Entwiklertools geschaut,aber auch nix von zu sehen das er feuert.
Mitlerweile bin ich mich sicher das hier was gewaltig schief läuft. Auch andere sachen Funktionieren hier nicht wie bei anderen. Hast du vieleicht auch schon gelesen das hier andere Sachen auch ihr eigenleben haben.

Ich würde das Problem ja gerne auf den Browser schieben aber es Funktioniert ja in gar kein Browser hier:mad:
 
Mal zur Info. Ich habe nee Lösung gefunden die schon mal zur hälfte Functioniert. Also Tab und Browser zu geht schon mal .Aber auch noch nicht Optimal weil so loggt er sich auch aus wenn man mal nur kurz den Tab wechselt

Javascript:
 (function () {
  var hasFocus = document.hasFocus();
  setInterval(function () {
    var hasFocusNow = document.hasFocus();
    if (hasFocus !== hasFocusNow && hasFocus) {
               $.ajax({
                type: "POST",
                url: "chatneu/logout.php",
                data: {login:'true'},
                async: "false",
                success: function(data){
 
          console.log(data)
                }
           });
    
    } else if (hasFocus !== hasFocusNow) {
    
     //wenn der focus zurück ist
    }
    hasFocus = hasFocusNow;
  }, 500);
})();

Vieleicht findet sich da auch noch was.
Gibt es da vieleicht eine Php Lösung ? Wahrscheinlich nicht weil ist ja clint oder ?
 
Zurück
Oben