79

チャットアプリケーションでは、アプリケーションが閉じたときにユーザーから確認を得る必要があります。

そこでwindow.onbeforeunload、確認アラートとwindow.onunloadに を使用しましたlogout()

  1. ただし、どちらの機能もIEとChromeで機能しています。(アプリケーションは正常に動作します)

  2. window.onbeforeunload Operaで動作せず、メッセージがFirefoxに表示されません。

  3. window.onunloadSafari、Opera、Firefoxでは動作しません。

私のJavaScriptコードは次のようになります。

// Used for confirmation, to closing the window 
window.onbeforeunload = function () {

    return  "Are you sure want to LOGOUT the session ?";
}; 

// Used to logout the session, when browser window was closed 
window.onunload = function () {

    if((sessionId != null)&&(sessionId!="null")&& (sessionId != ""))
        logout();
};

JQueryでも同じ機能を試しましたが、

<script type="text/javascript">

    $(window).on('beforeunload', function() {
        return 'Are you sure want to LOGOUT the session ?';
    });

    $(window).unload(function() {
        if ((sessionId != null) && (sessionId != "null") && (sessionId != "")) {
            logout();
        }
    });
    
</script>
4

6 に答える 6

100

残念ながら、あなたが使用している方法は、これらのブラウザーではサポートされていません。私の答え(この非支持的な行動)をサポートするために、以下のリンクを提供しました。

onbeforeunloadこれをサポートするために...で onunload働いていませんopera

Opera の onbeforeunload
http://www.zachleat.com/web/dont-let-the-door-hit-you-onunload-and-onbeforeunload/

このonunloadイベントは完全には機能しませんがonunload、ユーザーがリンクをクリックしてフォームが保存されていないページから移動した場合に警告を表示するために使用できます。

onunloadsafariこれをサポートするために...で 働いていません

https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

pagehideの代わりに、Safari ブラウザーでイベントを使用してみてくださいonunload

onunloadfirefoxこれをサポートするために...で 働いていません

https://bugzilla.mozilla.org/show_bug.cgi?id=681636

彼らはまだFFでも解決策を考え出していません

ご多幸をお祈り申し上げます。

于 2013-02-01T13:48:58.553 に答える
43

これは、つまり、firefox と chrome の実用的なソリューションです。

var myEvent = window.attachEvent || window.addEventListener;
var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compitable

            myEvent(chkevent, function(e) { // For >=IE7, Chrome, Firefox
                var confirmationMessage = 'Are you sure to leave the page?';  // a space
                (e || window.event).returnValue = confirmationMessage;
                return confirmationMessage;
            });
于 2014-01-30T11:58:49.920 に答える
17

jQueryを使用してIEおよびFFで動作させることができました:

$(window).bind('beforeunload', function(){

});

代わりに: unload、onunload、または onbeforeunload

于 2013-03-26T21:31:47.747 に答える
14

onunloadAjax非同期リクエストを同期リクエストに変更することで、Operaを除くすべてのブラウザで解決策を得ました。

xmlhttp.open("POST","LogoutAction",false);

Operaを除くすべてのブラウザでうまく機能します。

于 2013-02-07T08:39:02.833 に答える
6

onunloadイベントは、すべてのブラウザーで呼び出されるわけではありません。さらに悪いことに、onbeforeunloadイベントの戻り値を確認することはできません。これにより、実際にログアウト機能を実行できなくなります。

ただし、これを回避することはできます。

onbeforeunloadイベントで最初にログアウトを呼び出します。次に、ユーザーにプロンプ​​トを表示します。ユーザーがログアウトをキャンセルした場合は、onfocusイベントを使用して、自動的に再度ログインします。ちょっと後ろ向きですが、うまくいくはずだと思います。

'use strict';

var reconnect = false;

window.onfocus = function () {
  if (reconnect) {
    reconnect = false;
    alert("Perform an auto-login here!");
  }
};

window.onbeforeunload = function () {
  //logout();
  var msg = "Are you sure you want to leave?";
  reconnect = true;
  return msg;
};
于 2013-02-07T06:30:32.300 に答える
2

Firefox は、カスタムの onbeforeunload メッセージを表示しません。Mozilla は、誤解を招くテキストを表示する可能性のある悪意のあるサイトからエンド ユーザーを保護していると述べています。

于 2014-11-24T10:26:40.230 に答える