【问题标题】: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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-17
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      相关资源
      最近更新 更多