GWT 在 CloseHandler 中检测浏览器刷新

标签 gwt refresh

我有一个 GWT 应用程序,我想在用户离开应用程序以强制注销并删除任何数据等时运行一些代码。

为此,我使用 CloseHandler 并使用 Window.addCloseHandler 注册它。

我注意到,当单击刷新按钮时,会运行 onClose 方法,但我无法将此事件与用户关闭浏览器的关闭区分开来。如果是刷新我不想注销等,我只想在用户关闭浏览器/选项卡或导航离开网站时执行此操作。

有人知道我该怎么做吗?

最佳答案

没有办法区分“关闭”和“刷新”。但是,您可以设置一个保存上次 CloseHandler 调用时间的 cookie,并在加载模块时检查该时间是否足够老,可以在显示页面之前清理信息。

您可以使用以下实用程序类 (BrowserCloseDetector) 来做到这一点。这是在 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;
    }
}

关于GWT 在 CloseHandler 中检测浏览器刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5203856/

相关文章:

java - 从 1.7 升级到 2.0 后,GWT 加载模块时出错

java - 如何从另一台机器查看 GWT Jetty devmode?

gwt - 如何在vaadin组件中设置属性?

css - 在网站上更新 CSS 时遇到问题

excel - 暂停 VBA 循环,直到重新计算工作表

css - GWT CSS DataGrid 隐藏按钮

GWT 和 getClass().getPackage()

java - Android:更新ViewPager的有效方法

android - 滑动时 ViewPager 更新 fragment

bash - 命令刷新其他命令的输出