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

上記のイベントは、refresh と close の両方のイベントで発生しています。区別する方法はありますか。

4

1 に答える 1

3

ブラウザーのタブを閉じる操作とrefresh機能を区別するのは本当に面倒です。なぜなら、どのイベントが発生したかを知るための 2 つのイベントがないからです。

しかし、常にいくつかの要件があります:)

私がやっていることはcookie、オンロードでフラグを設定し、それが見つかった場合はフラグをtruecookieにし、ブラウザのクローズイベントで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 に答える