刷新浏览器我有一个GWT应用程序,我希望当用户离开应用程序强行注销并删除任何数据等GWT检测是closeHandler
要做到这一点我使用的是closeHandler运行一些代码和使用Window.addCloseHandler注册它。
我注意到,当点击刷新按钮时,onClose方法会运行,但我一直无法区分这个事件和用户关闭浏览器的地方。如果是刷新,我不想做注销等,我只想在用户关闭浏览器/选项卡或从网站导航时执行此操作。
有人知道我该怎么做吗?
刷新浏览器我有一个GWT应用程序,我希望当用户离开应用程序强行注销并删除任何数据等GWT检测是closeHandler
要做到这一点我使用的是closeHandler运行一些代码和使用Window.addCloseHandler注册它。
我注意到,当点击刷新按钮时,onClose方法会运行,但我一直无法区分这个事件和用户关闭浏览器的地方。如果是刷新,我不想做注销等,我只想在用户关闭浏览器/选项卡或从网站导航时执行此操作。
有人知道我该怎么做吗?
你试过
< BODY onunload的= “脚本名”>
在你的GWT的托管/启动HTML文件?
我在想,如果您在托管文件中定义了一个映射“哈希”(即JavaScript伪哈希),然后通过Dictionary类访问GWT中的“哈希”,您可以更新该哈希中的值作为用户通过gwt app进展。这意味着,您的编程风格将要求您将用户进度上的里程碑登录到此地图上。
当用户关闭浏览器页面时,将启动启动html页面的onunload脚本。该脚本将访问地图以找出需要更新到服务器的内容,或者要启动的其他URL。
我也是如果有人得到一个解决方案(GWT/Java方)。 也许我们可以用HistoryListerner做到这一点? 1-为当前查看页面设置一个标志。 2 - 当ClosingHandler事件发生时,在服务器端启动“超时”(例如10秒) 3 - 如果在这段时间内,您从HistoryListerner获得了一个带有相同最后一个标志的按摩,所以这只是一次刷新。断开的 如果计时器已经结束...
是不是一个很好的解决方案,但我认为这是很容易做到......如果有人有一个更好的...
没有办法区分'刷新''关闭'。但是,您可以设置保存最后一次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;
}
}