Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.javascript > #4986

Re: Aktion beim Schließne eines Browserfensters

From Ralph Stahl <post@rstahl.de>
Newsgroups de.comp.lang.javascript
Subject Re: Aktion beim Schließne eines Browserfensters
Date 2018-12-06 14:24 +0100
Message-ID <g6sm8cFpivpU1@mid.individual.net> (permalink)
References <g6q2k9F85knU1@mid.individual.net> <c84c6ac7-fb97-bd45-e65e-b6c342e70a22@PointedEars.de>

Show all headers | View raw


Das Problem ist bereits gelöst, siehe unten.

Thomas 'PointedEars' Lahn schrieb:
> Ralph Stahl wrote:
>> Ich möchte erreichen, dass beim Schließen eines Browserfensters über das
>> Kreuzchen rechts oben als letzte Amtshandlung die im Browser laufende
>> Anwendung noch ordentlich geschlossen wird (Session schließen etc). Nach
>> zum Beispiel [1] sollte das durch das Abfangen des onunload-Events
>> passieren können. Mir schwebt vor, das so ähnlich zu tun:
>>
>> $(document).ready(function () {
>>
>>       window.unload = function () {
>>           $.post('funktion.php');
>>       };
>>       ...
>> }
>>
>> In funktion.php soll soll u.a. protokolliert werden, dass ich hier
>> "vorbei gekommen" bin (das ist erprobt). Aber es passiert nichts. Auch
>> nicht mit onbeforeunload nach [2].
>>
>> Ein anderes Beispiel fand ich bei stackoverflow [3], ich habs etwas
>> abgewandelt, aber das tut auch nichts:
>>
>> <html>
>> <body>
>>       <script>
>>
>>           function goodBye(evt) {
>>               console.log('unload');
>>               return 'good bye';
>>           }
>>
>>           window.onbeforeunload = goodBye;
>> 	
>>       </script>
>> </body>
>> </html>
>>
>> Warum bewirkt das alles nichts?
> 
> 1. <http://glasgoogle.de/> (leider ist unsere FAQ etwas angestaubt)

Leider wusste ich nicht genau, wie ich was fragen und suchen sollte, 
deswegen die unschöne Fragestellung :-).
> 
> 2. Das ist kein gültiges HTML(5): <http://validator.w3.org/>

Weiß ich, taugt aber als Beispiel zum Reden :-).

> 3. Du schreibst auch nicht, mit welchem/-n Umgebungen Du getestet hast.

Nur Firefox, darin soll eine bestimmte Anwendung laufen, ist so vereinbart.

> Vermutlich geht es zumindest teilweise nicht zum Schutz des Benutzers (was
> zeigt die Fehlerkonsole?).  Wäre das nämlich möglich, was Du willst, dann
> könnte jede Website, ohne dass der Benutzer das beeinflussen kann, beim
> Wegnavigieren noch schnell irgendwelche Daten absenden, und der Benutzer
> müsste warten, bis das geschehen wäre (oder definitiv fehlschlüge).

Genau das tut die gefundene Lösung nun. Auszug:

$(document).ready(function () {
    $(window).on('unload', function () {
    $.ajax({
       'url': 'meineaktionen.php',
       'async': false
       // https://stackoverflow.com/a/19274533/9776286
    });
    ...
});

Entscheidend ist das 'async':false, weil eben sonst der Tab/Browser weg 
wäre, bevor die Aktion ausgeführt werden konnte. In meinefunktionen.php 
wird z.B. die laufende Session gekillt, das ist hier wichtig.


> Diese beiden Events (“unload” und “beforeunload”) werden nämlich nicht nur
> gefeuert, wenn das Browserfenster bzw. der Browser-Tab geschlossen wird.

Ja, auch beim Reload, zumindest "beforeunload", das weiß ich.

> Dass in unload- und beforeunload-Listenern nicht alles funktioniert, ist
> bekannt.  Besonders in Firefox sind hier zum Schutz des Benutzers die
> Möglichkeiten für Webentwickler stark eingeschränkt.  Was sicher geht ist
> das Gezeigte: im onbeforeunload-Listener einen String zurückgeben, mit dem
> der Benutzer gefragt werden kann, ob er wirklich wegnavigieren will.
> 
> Beim unload-Event ist es eventuell auch schon zu spät, weil relevante
> Objekte schon nicht mehr verfügbar sind oder währenddessen abgeräumt werden.
>   In jedem Fall ist es eine Race Condition.
> 
> <https://javascript.info/onload-ondomcontentloaded>
> 
> Sessions lässt man am besten bei Logout oder mit Timeout expiren
> (Session-Cookies und Server-Sessions), da man sich nicht darauf verlassen
> kann, dass clientseitiges Scripting verwendet wird.

Gewiss. Hier muss es aber eben auch gehen, wenn das Fenster einfach 
geschlossen wird. Das tut es nun.

> Übrigens ist jQuery hierfür Overkill; daher das einfache Beispiel auf
> Stack Overflow.
Nur funktionieren diese eben nicht, deswegen frage ich ja. Entscheidend 
ist wie gesagt das async, was mit trivialem Javascript nicht als 
Zweizeiler geht. Außerdem habe ich sowieso jQuery, da kann ich es auch 
nutzen.

Ralph

Back to de.comp.lang.javascript | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Aktion beim Schließne eines Browserfensters Ralph Stahl <post@rstahl.de> - 2018-12-05 14:37 +0100
  Re: Aktion beim Schließne eines Browserfensters Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2018-12-05 22:35 +0100
    Re: Aktion beim Schließne eines Browserfensters Ralph Stahl <post@rstahl.de> - 2018-12-06 14:24 +0100
      Re: Aktion beim Schließne eines Browserfensters "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-12-06 15:35 +0100
      Re: Aktion beim Schließne eines Browserfensters Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2018-12-06 17:21 +0100
      Re: Aktion beim Schließne eines Browserfensters Stefan Reuther <stefan.news@arcor.de> - 2018-12-06 18:57 +0100
        Re: Aktion beim Schließne eines Browserfensters Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2018-12-06 21:22 +0100
          Re: Aktion beim Schließne eines Browserfensters Stefan Reuther <stefan.news@arcor.de> - 2018-12-07 19:47 +0100
            Re: Aktion beim Schließne eines Browserfensters Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2018-12-07 20:22 +0100
              Re: Aktion beim Schließne eines Browserfensters Arno Welzel <usenet@arnowelzel.de> - 2018-12-07 21:17 +0100
                Re: Aktion beim Schließne eines Browserfensters "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2018-12-14 00:03 +0100
                Re: Aktion beim Schließne eines Browserfensters Arno Welzel <usenet@arnowelzel.de> - 2018-12-14 11:33 +0100
                Re: Aktion beim Schließne eines Browserfensters Arno Welzel <usenet@arnowelzel.de> - 2018-12-14 11:34 +0100
                Re: Aktion beim Schließne eines Browserfensters "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2018-12-16 21:22 +0100
                Re: Aktion beim Schließne eines Browserfensters Stefan Reuther <stefan.news@arcor.de> - 2018-12-17 13:25 +0100
                Re: Aktion beim Schließne eines Browserfensters "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2018-12-20 13:32 +0100
                Re: Aktion beim Schließne eines Browserfensters Stefan Reuther <stefan.news@arcor.de> - 2018-12-22 11:56 +0100
                Re: Aktion beim Schließne eines Browserfensters "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2019-01-02 13:22 +0100
                Re: Aktion beim Schließne eines Browserfensters Arno Welzel <usenet@arnowelzel.de> - 2019-01-03 08:50 +0100
                Re: Aktion beim Schließne eines Browserfensters Stefan Reuther <stefan.news@arcor.de> - 2018-12-14 18:56 +0100
                Re: Aktion beim Schließne eines Browserfensters Arno Welzel <usenet@arnowelzel.de> - 2018-12-15 12:48 +0100
                Re: Aktion beim Schließne eines Browserfensters "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2018-12-16 21:43 +0100
              Re: Aktion beim Schließne eines Browserfensters Jan Novak <repcom@gmail.com> - 2018-12-10 10:02 +0100
                Re: Aktion beim Schließne eines Browserfensters Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2018-12-10 21:26 +0100
    Re: Aktion beim Schließne eines Browserfensters Arno Welzel <usenet@arnowelzel.de> - 2018-12-07 21:09 +0100
  Re: Aktion beim Schließne eines Browserfensters Arno Welzel <usenet@arnowelzel.de> - 2018-12-07 21:13 +0100
    Re: Aktion beim Schließne eines Browserfensters Ralph Stahl <post@rstahl.de> - 2018-12-10 10:46 +0100

csiph-web