A. Henkelmann: Funktionen beim Schließen des Fensters ausführen

Beitrag lesen

Huhu!

Gibt es eine Möglichkeit, eine Funktion beim Schließen des Browserfensters automatisch auszuführen?

[...]

Ich dachte, man könnte das dadurch umgehen, dass der Benutzer beim Schließen des Fensters automatisch ausgeloggt wird, weiß aber nicht, ob so etwas überhaupt möglich ist.
Hat da jemand eine Idee?

Ja, das geht. Eingeschränkt. Aber es geht. Ich arbeite auch zur Zeit an genau demselben Problem. Die Usersession soll bei Schließen des Browserfensters auf dem Server beendet werden. Dazu muss ich per GET einen Parameter an den Server schicken. Ich mache das z.Zt mit Ajax:

window.onbeforeunload = function () {
   var closeThis = CloseWindow();
};

function CloseWindow() {
   // Noch fix irgendwelche Bedingungen pruefen
   // da onbeforeunload auch bei Reload oder target=_top gefeuert wird
   var logoff = callLogoffByAjax(strUrl);
}

function callLogoffByAjax(was){
   // funktioniert bei IE und Firefox (Win XP) und Firefox (Mac Os X);
   //Safari (Mac Os X) blieb wg. onbeforeunlaod ungetestet
   if(was == "" || !was){
      return false;
   }
   var strUriLogoff = was;
   var xmlHttp = null;
   // Handler fuer die verschiedenen Browser bestimmen u. instantiieren:
   // Mozilla, Opera, Safari sowie Internet Explorer 7
   if (typeof XMLHttpRequest != 'undefined') {
      xmlHttp = new XMLHttpRequest();
   }
   if (!xmlHttp) {
       // Internet Explorer 6 und aelter
       try {
           xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
       } catch(e) {
           try {
               xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
           } catch(e) {
               xmlHttp  = null;
           }
       }
   }
   // Aufruf taetigen:
   if (xmlHttp) {
       xmlHttp.open('GET', strUriLogoff, true); // true=asynchroner Aufruf, false=synchroner Aufruf
       xmlHttp.send(null);
   }
}

onbeforeunload wird nicht auf dem Mac Os X im Safari ausgelöst, im IE schon. Auf Win XP mit FF 1.5 und IE 6 hat es funktioniert.
Achtung: onebeforeunload wird auch ausgelöst bei Reload oder bei Links oder Formularen mit target=_top. Das musst du ggf. noch abfangen.
Und nochmal aufpassen: du kannst nur Daten an die Domäne schicken, wo sich auch das Skript befindet.

Viel Spaß!

Liebe Grüße
Anja  ;->