【问题标题】:Differentiate browser tab close and refresh (to detect multiple instances of application)区分浏览器选项卡关闭和刷新(以检测应用程序的多个实例)
【发布时间】:2013-09-11 07:27:38
【问题描述】:
如何区分浏览器标签的关闭和刷新功能。
截至目前,窗口刷新和关闭事件没有不同的事件。
我的要求是检查天气用户是否已登录或未在任何选项卡中,这样我就不会允许他在任何其他选项卡中加载我的应用程序。
在GWT (java)
private void registerWindowCloseEvent() {
Window.addCloseHandler(new CloseHandler<Window>() {
@Override
public void onClose(CloseEvent<Window> event) {
// do something on close
}
});
}
在JavaScript/Jquery:
window.onbeforeunload = function(e) {
// do something on close
};
上述事件同时触发刷新和关闭事件。有什么方法可以区分。
【问题讨论】:
标签:
java
javascript
jquery
gwt
smartgwt
【解决方案1】:
区分浏览器选项卡关闭和refresh 功能真的很痛苦,因为我们没有两个事件来知道哪个事件被触发。
但总有一些要求:)
我正在做的是在加载时设置一个 cookie,如果发现 cookie 并在浏览器关闭事件中删除 cookie,则将标志设为真。
因此,除非他关闭活动选项卡(已登录选项卡),否则该 cookie 仍然存在并且如果他尝试在另一个选项卡中打开,那么已经活动的对话框就会出现。
注意:在Cookies.的帮助下提供的解决方案
在
这是 GWT 的 onModule() / 与 onload/document.ready() 的 java script/Jquery 相同。
@Override
public void onModuleLoad() {
if("already_in_browser".
equalsIgnoreCase(Cookies.getCookie("already_in_browser"))){
showAlreadyTabActiveDialog();
return;
}else{
setLoggedincookie();
}
private void setLoggedincookie() {
isLoggedintab = true; //this is a global variable
registerWindowCloseEvent();
com.google.gwt.user.client.Cookies.
setCookie("already_in_browser","already_in_browser");
}
private void showAlreadyTabActiveDialog() {
alert("You are already active in another tab");
registerWindowCloseEvent();
}
/** This event is onbeforeunload in javascript
private void registerWindowCloseEvent() {
Window.addCloseHandler(new CloseHandler<Window>() {
@Override
public void onClose(CloseEvent<Window> event) {
if(isLoggedintab ){
Cookies.removeCookie("already_in_browser");
}
}
});
}
如果您在其中发现任何错误或循环漏洞,请告诉我。以便我进行调查。
如果有人提供解决方案,我会很高兴,而不使用cookies。