Frage

ich eine Anwendung in GWT schreibe und ich brauche, um festzustellen, wann ein Benutzer aus meiner Anwendung navigiert, oder wenn er schließt das Browserfenster (onUnload Ereignis) und machen eine Abmeldung (Session Ungültigkeits und einige andere Bereinigungsaufgaben). Die Abmeldung wird von einem Servlet ausgeführt.

ich zur Zeit tue dies, indem er in die onUnload () Ereignis Einhaken und ein neues Fenster deutete auf das Logout-Servlet zu öffnen.

Gibt es einen besseren Weg, dies zu tun? Alle anderen Vorschläge sind willkommen.

War es hilfreich?

Lösung

Sieht aus wie GWT ein Ereignis dies für genau funktioniert hat.

ClosingEvent .

Sieht aus wie Sie eine ClosingHandler

Andere Tipps

Warum nicht einfach einen sehr kurzlebige Session-Cookie machen, die mit jedem Laden der Seite zurückgesetzt wird, dann einen Tracking-Cookie hinzufügen. Wenn der Benutzer zurückgibt bemerken Sie die Tracking-Cookie aber keine Session-Cookie. Expire die Sitzung und löscht alles bis zu diesem Zeitpunkt.

Popup-Blocker verhindert, dass Ihre Sitzung bereinigen, wenn es blockiert die onUnload Fenster öffnen, weil dies etwas Spammer verwenden ist.

Dies ist, wie die Abschlussveranstaltung funktioniert:

Window.addWindowClosingHandler(new Window.ClosingHandler()
{
 @Override
 public void onWindowClosing(ClosingEvent event)
 {
  event.setMessage("Are you sure?");
 }
});

Dann GWT gibt dem Benutzer die Möglichkeit, ja oder nein zu sagen. Natürlich können Sie auch einen Test dort hinzufügen, um zu sehen, ob sie alle nicht gespeicherten Daten haben oder was auch immer Sie wollen. Die Nachricht nicht einstellen oder auf null Einstellung nichts tun.

Die Art und Weise, das zu tun ist, um die Window.addWindowClosingHandler zu verwenden wie @Carnell und @BillLyons sagte. Aber ich benutze eine zusätzliche Technik zu erkennen, wenn der Browser geschlossen wurde oder wenn die Seite wieder besucht wird (durch refresh oder zurück Navigation).

Im Anschluss gibt es eine Utility-Klasse, die Ihnen helfen kann. Rufen Sie einfach die folgenden Zeilen in Ihrem onModuleLoad zu testen.

Die Verwendung Beispiel :

@Override
public void onModuleLoad() {
    if (BrowserCloseDetector.get().wasClosed()) {
        GWT.log("Browser was closed.");
    }
    else {
        GWT.log("Refreshing or returning from another page.");
    }
}

Die Utility-Klasse :

import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Window;

public class BrowserCloseDetector {
    private static final String COOKIE = "detector";
    private static BrowserCloseDetector instance;

    private BrowserCloseDetector() {
        Window.addWindowClosingHandler(new Window.ClosingHandler() {
            public void onWindowClosing(Window.ClosingEvent closingEvent) {
                Cookies.setCookie(COOKIE, "");
            }
        });
    }

    public static BrowserCloseDetector get() {
        return (instance == null) ? instance = new BrowserCloseDetector() : instance;
    }

    public boolean wasClosed() {
        return Cookies.getCookie(COOKIE) == null;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top