jQuery unload-Ereignis nur für die Fenster schließen nicht für die Link-navigation
Bin ich mit diesem code für die Anmeldung der Benutzer schließt, wenn die Seite, aber der Benutzer Abmelden auch beim Klick auf andere links (gleiche website):
$( window ).unload(function() {
$.ajax({url:"?logout&leave=yes", async:false})
});
Gibt es eine Möglichkeit, zu unterscheiden zwischen der link-navigation und real-Seite schließen?
EDIT:
Ich bin derzeit implementiert, diese Lösung, aber es fehlt zu erkennen, Seite neu laden
$('a').click(function(){
var url = $(this).attr("href");
window.onbeforeunload = null;
$(window).unbind('beforeunload');
window.location = url;
});
- ist das click-Ereignis von <a> funktioniert nicht? haben Sie wach in Ihr für die Prüfung?
- meine aktuelle Lösung funktioniert gut.
- Nun, wenn Sie können trigger-Dokument.klicken Sie auf(Funktion(){create cookie}; dann vor dem entladen zu überprüfen, dass cookie haben seinen Wert aus diese Weise können Sie erkennen, Seite Neuladen oder browser zu entladen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie die folgenden Lösungen, hoffe das hilft
oder
submit
- Taste und die Seite-Beiträge zurück?Diese Frage wurde schon mehrfach gefragt :
javascript erkennen, browser schließen tab/browser schließen
Wie zu erkennen, ein Fenster zu schließen-Ereignis mit javascript oder php
Automatische Abmeldung, wenn der tab geschlossen wird
und Sie finden viele andere.
Die kurze Antwort ist : das können Sie nicht. Wie die anderen Antworten sagen : es gibt tatsächlich viele andere legitime Fälle, wo der Benutzer auf jeden Fall nicht möchten abgemeldet werden, beim schließen eines Tabs (gleichen Standort eröffnet in zwei tabs, Lesezeichen anklicken, die url manuell geändert, in der Navigationsleiste ...).
Die einzige Möglichkeit, die ich kenne erkennen, wenn ein Benutzer wünscht, nach dem ausloggen ist ein "Logout" - button auf Ihrer Seite.
Ansonsten sollten Sie verwalten einen timeout-Mechanismus für Ihre sesions (z.B. : auf der server-Seite die löschen-Sitzungen, nach sagen wir 30 Minuten Inaktivität).
Gibt es keine Möglichkeit zu wissen, wo der Benutzer will, zu gehen, wenn er verlässt Ihre Seite.
Stattdessen auf unverbindliche manuell Ereignisse auf klicken Sie auf, Sie könnte ein flag setzen, und überspringen Sie die AJAX-Anforderung in Ihrem
unload
callback-wenn dieses flag festgelegt ist. Beachten Sie auch, dass$(window).unload()
ist veraltet und sollte ersetzt werden mit:$(window).on('unload', function() {})
.Die einzige Lösung, die ich denken kann, ist es Wert in eine cookie (oder "LocalStorage") auf Seite
unload
und prüfen Sie, ob dieser Wert gesetzt ist, beim laden der Seite. Aber das wird nicht funktionieren, wenn Sie senden möchten ein AJAX-request nur, wenn der Benutzer verlässt Ihre app.Ich fürchte, wir sind vor einem XY-problem, obwohl. Kann nicht setzen Sie irgendeine Art von timeout, das auf server-Seite, die wird richtig Abmelden-Benutzer, sobald er inaktiv ist? Auch mit der link-trick, Ihre aktuelle Lösung wird nicht funktionieren, wenn der Benutzer angemeldet ist mehrere Male, wenn er öffnet ein neues Fenster/tab, oder wenn er es einfach lässt die Seite im hintergrund laufen.
- Links sind nicht das einzige problem, was, wenn der Benutzer bearbeitet die url und sendet oder einfach die Seite aktualisiert, um zu sehen, neue Inhalte. Oder wie bereits erwähnt, wenn Benutzer 2 oder mehr Fenster geöffnet, und er schließt das ein, macht es sich der anderen Fenster ?