Path: csiph.com!aioe.org!news.mb-net.net!open-news-network.org!.POSTED.211.232.197.178.dynamic.wless.lssmb00p-cgnat.res.cust.swisscom.ch!not-for-mail From: Thomas 'PointedEars' Lahn Newsgroups: de.comp.lang.javascript Subject: =?UTF-8?Q?Re:_Aktion_beim_Schlie=c3=9fne_eines_Browserfensters?= Date: Wed, 5 Dec 2018 22:35:24 +0100 Organization: PointedEars Software (PES) Message-ID: References: Reply-To: Thomas 'PointedEars' Lahn Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit Injection-Info: gwaiyur.mb-net.net; posting-host="211.232.197.178.dynamic.wless.lssmb00p-cgnat.res.cust.swisscom.ch:178.197.232.211"; logging-data="29685"; mail-complaints-to="abuse@open-news-network.org" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 Content-Language: de-CH X-User-ID: U2FsdGVkX1+y4IytUfaXpv6mI0P1U/T00JGXUHYNVxQ+qj8PJBM8Xw== Cancel-Lock: sha1:CQyxzGP3zpcZ6wrxRLnNVQGBljw= In-Reply-To: Xref: csiph.com de.comp.lang.javascript:4985 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: > > > > > > > > Warum bewirkt das alles nichts? 1. (leider ist unsere FAQ etwas angestaubt) 2. Das ist kein gültiges HTML(5): 3. Du schreibst auch nicht, mit welchem/-n Umgebungen Du getestet hast. 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). Diese beiden Events (“unload” und “beforeunload”) werden nämlich nicht nur gefeuert, wenn das Browserfenster bzw. der Browser-Tab geschlossen wird. 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. 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. Übrigens ist jQuery hierfür Overkill; daher das einfache Beispiel auf Stack Overflow. > [1] https://www.w3schools.com/jsref/event_onunload.asp > [2] https://www.w3schools.com/jsref/event_onbeforeunload.asp *Alle* Bookmarks mit URI-Präfix “https://www.w3schools.com/” *löschen* und ersetzen durch die äquivalenten mit Präfix . JETZT. SOFORT. -- PointedEars Twitter: @PointedEars2 Please do not cc me. / Bitte keine Kopien per E-Mail.