Schließen vom Browser abfragen

meste

Erfahrenes Mitglied
Hallo allerseits,

ich versuche verzweifelt den Event NUR beim schließen des Browsers abzufangen ohne Erfolg. Habe es bereits mit
Code:
<script language="javascript" type="text/javascript">
        function closeIt() {
            Check = confirm("Wollen Sie diese Seite wirklich beenden?");
            if (Check == false) { alert("Nein"); }
            else { alert("Ja"); }
        }
        window.onbeforeunload = closeIt;
    </script>
probiert allerdings wird die messageBox immer angezeigt auch beim klick auf einen Link und/oder beim schließen des Browsers bzg. Tab-Reiter. Weiters kommt nach dieser MessageBox eine zweite und eine dritte MessageBox welches eigentlich nicht kommen sollte.

Anhang anzeigen msg1.bmp
Anhang anzeigen msg2.bmp
msg3.jpg

Wie kann ich auf einfachste Art und Weise eine MessageBox anzeigen und je nach was der User auswählt, entweder das Fenster schließen oder eine ASP-Methode im CodeBehind aufrufen?

Wäre für jede Hilfe sehr dankbar.
Lg
m.e.s.t.e
 
ich versuche verzweifelt den Event NUR beim schließen des Browsers abzufangen ohne Erfolg.

Das geht nicht.

allerdings wird die messageBox immer angezeigt auch beim klick auf einen Link und/oder beim schließen des Browsers bzg. Tab-Reiter.

Das ist bei onunload eben so.

eine zweite und eine dritte MessageBox welches eigentlich nicht kommen sollte.

Dann musst du die auch aus deinem Code raus nehmen. Du rufst dort ja explizit "confirm" UND "alert" auf (beide nicht nötig).


Wie kann ich auf einfachste Art und Weise eine MessageBox anzeigen und je nach was der User auswählt, entweder das Fenster schließen oder eine ASP-Methode im CodeBehind aufrufen?

Das ist nicht möglich. Das Event gehört nicht zum Standard und wird überall anders unterstützt. https://developer.mozilla.org/en/DOM/window.onbeforeunload
 
... danke vorerst für deine Antwort aber wei funktioniert es bei MSDN.
Wenn man dort einen Beitrag schreibt und dann mitten drin auf x klickt kommt die meldung.
Wenn man aber auf speichern klickt kommt keine Meldung.

Der Sinn meiner Frage:
Sobald sich der user abmeldet oder den Browser schließt möchte die Spalte "isOnline" in der DB auf false setzen. Beim ordnungsgemäßem Abmelden ist das kein Problem aber wenn der User den Browser schließt würde ich das sonst nicht mitbekommen und der User wäre trotzdem noch online.

Danke und Lg
m.e.s.t.e

Verwende ASP und MS-SQL
 
Zuletzt bearbeitet:
... danke vorerst für deine Antwort aber wei funktioniert es bei MSDN.
Wenn man dort einen Beitrag schreibt und dann mitten drin auf x klickt kommt die meldung.
Wenn man aber auf speichern klickt kommt keine Meldung.

Das ist hier im Forum genauso. Aber da wird nur der Standard Dialog vom Browser angezeigt. Und es wird auch nichts zum Server gesendet.

Das was du vor hast geht so nicht, weil wenn du was zum Server sendest, während das Fenster geschlossen wird, dann kommt das möglicherweise beim Server nicht an (race condition).

Du musst also entweder:

-Eine Verbindung zum Server offen halten (z.B. long polling oder websocket) und wenn diese Verbindung geschlossen wird, ist der Nutzer offline

-Den Nutzer einen Heartbeat senden lassen (z.B. alle 10 Sekunden). Wenn du 10 Sekunden lang nichts von ihm hörst, ist er offline
 
... gibt es vielleicht ein Sample bzgl. Heartbeat wo ich mir den Ansatz anschauen kann.

Danke und Lg
 
Sowas in der Art

Javascript:
setInterval(function() {
    //Hier AJAX request absetzen
}, 5000);


Auf dem Server dann ein Update auf die Tabelle (das ist MySQL spezifisches SQL, musst du auf MS anpassen). Das Update auch bei jedem normalen Seitenaufruf machen.

SQL:
UPDATE users SET last_beat = NOW() WHERE id = 'foo';


Alle Nutzer, die online sind

SQL:
SELECT * FROM users WHERE last_beat + INTERVAL 6 SECOND > NOW();
 
Hallo CPoly,
danke für das nette Sample, werde mir die vorgehensweise mal umsetzen.

Lg
m.e.s.t.e
 
Hallo cPoly,

habe das so weit fertig, jetzt habe ich noch eine Frage bzw. ein Problem.
Wie oder wo muss ich die Methode "setInterval" aufrufen damit es danach jede 5 Sek. autom wieder aufgerufen wird.
Im Body?
Code:
<body onLoad="setInterval()" ...>

Habe schon einige Erfolgslose Möglichkeiten bereits probiert.

Danke und Lg
m.e.s.t.e
 
HTML:
<script type="text/javascript">
window.addEventListener('load', function () {
  setIntervall(function () {
    // Request
  }, 5000);
}, false);
</script>
 
Hallo crack!

danke für dein Beispiel, habe das jetzt mit ScriptManager, UpdatePanel, und Timer realisiert.
Trotzdem danke für die schnelle Antwort.


Lg
m.e.s.t.e
 

Neue Beiträge

Zurück