检测浏览器关闭/导航到其他页面并注销的最佳方法
-
23-08-2019 - |
题
我正在 GWT 中编写一个应用程序,我需要检测用户何时离开我的应用程序或何时关闭浏览器窗口(onUnload 事件)并执行注销(会话失效和其他一些清理任务)。注销操作由 servlet 执行。
我目前正在通过挂钩 onUnload() 事件并打开一个指向注销 servlet 的新窗口来执行此操作。
有一个更好的方法吗?欢迎任何其他建议。
其他提示
为什么不只是做一个非常短暂的会话cookie是在每个页面载入复位,然后添加一个跟踪Cookie。当用户返回您注意到跟踪cookie,但没有会话cookie。过期的会议,并在这一点上清除一切。
弹出窗口阻止程序会阻止你的会话清理时,它会阻止onunload的窗口打开,因为这是一件垃圾邮件发送者使用。
这是结束活动是如何工作的:
Window.addWindowClosingHandler(new Window.ClosingHandler()
{
@Override
public void onWindowClosing(ClosingEvent event)
{
event.setMessage("Are you sure?");
}
});
然后GWT为用户提供了一个机会说yes或no。当然,你也可以在里面添加一个测试,看看他们有任何未保存的数据或任何你想要的。不设置消息或将其设置为空不会做任何事情。
做到这一点的办法是使用Window.addWindowClosingHandler
等@Carnell和@BillLyons所述。但是,我使用一个额外的技术,如果浏览器已经闭合,以检测或如果页面被再次访问(刷新由或后退导航)。
下面有一个实用工具类,它可以帮助你。只是叫你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;
}
}
不隶属于 StackOverflow