java - 区分浏览器选项卡关闭和刷新(以检测应用程序的多个实例)

标签 java javascript jquery gwt smartgwt

如何区分浏览器选项卡关闭和刷新功能。

截至目前,窗口刷新和关闭事件没有不同的事件。

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/Jqueryonload/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/

相关文章:

javascript - 如何用JS手动弹出所需的文本字段警报?

javascript - 在 jquery 中使用两个下拉菜单?

javascript - 如何在输入中显示 fileRead 结果?

java - 自定义注解、可插拔注解处理和AOP(面向方面​​编程)之间的根本区别是什么?

java - 如何将 Java Long 转换为 Cassandra 的 byte[]?

java - 如何维护线程列表?

javascript - Jquery - 首次使用后初始化选择框

java - 使用 Mockito 调用验证 super.method()

javascript - 检测在 Mac 上键入的重音字符?

js文件中的PHP变量