3

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

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

我的要求是检查天气用户是否已登录或未在任何选项卡中,这样我就不会允许他在任何其他选项卡中加载我的应用程序。

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
    };

上述事件正在为事件刷新和关闭触发..有什么方法可以区分。

4

1 回答 1

3

区分浏览器选项卡关闭和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.

于 2013-09-07T06:48:08.593 回答