1

在这里,我在下面编写的代码中遇到了一个问题,该代码是为了检测从网站browser's close event生成用户的。logged out

但不幸的是,这个事件也触发Refresh了:(。

Window.addWindowClosingHandler(new Window.ClosingHandler() {
    public void onWindowClosing(Window.ClosingEvent closingEvent) {
        closingEvent.setMessage("Do you really want to close the page?");
    }
});

是的,我 在 CloseHandler 中通过 GWT 检测浏览器刷新

但我在那里没有发现任何积极的结果。

根据 GWT Window.ClosingEvent类 api:

Fired just before the browser window closes or navigates to a different site.

但我仍然希望我们能检测到browser refresh

任何人都可以对此提供提示吗?

4

1 回答 1

4

无法知道是否Window.ClosingEvent正在调用 刷新或关闭浏览器。但是,如果您的问题只是检测浏览器是否已关闭,您可以使用会话 cookie。

这是一个可以帮助您的实用程序类。只需调用以下行onModuleLoad进行测试。

测试线

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

实用程序类

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;
    }
}
于 2013-02-15T20:48:28.140 回答