如何区分浏览器选项卡关闭和刷新功能。
截至目前,窗口刷新和关闭事件没有不同的事件。
My requirement is to checking weather user already logged in or not in any of tabs,So that I wont allow him to load my app in any other tabs.
在 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
};
以上事件在事件刷新和关闭时都会触发。有什么方法可以区分。
最佳答案
区分浏览器选项卡关闭和刷新
功能真的很痛苦,因为我们没有两个事件来知道哪个事件被触发。
但总有一些要求:)
我正在做的是在加载时设置一个 cookie
,如果发现 cookie
并在浏览器关闭事件中删除该 cookie,则设置一个标志为真。
因此,除非他关闭 Activity 选项卡(已登录选项卡),否则该 cookie 仍然存在,如果他尝试在另一个选项卡中打开,则会出现已经处于 Activity 状态的对话框。
注意:在 Cookies 的帮助下提供的解决方案。
在
这是 GWT 的 onModule()/与 java script/Jquery
的 onload/document.ready()
相同。
@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
。
关于java - 区分浏览器选项卡关闭和刷新(以检测应用程序的多个实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18670598/