我有一个 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/