web-dev-qa-db-ja.com

Chromeのwindow.onbeforeunload:最新の修正は何ですか?

明らかに、window.onbeforeunloadは、遭遇したすべての問題から見たように、Chromeで問題のかなりの部分に遭遇しました。最新の回避策は何ですか?

私が仕事に近づいたのは、 this だけです。

window.onbeforeunload = function () { return "alert" };

ただし、return "alert"をalert( "blah")のようなものに置き換えると、Chromeから何も得られません。

この質問 で、Googleが意図的にこれをブロックしていることを見ました。彼らに良い...しかし、誰かがウィンドウを閉じたときにAJAX呼び出しをしたい場合はどうすればいいですか?私の場合、誰かが私のウェブサイトのチャットルームを離れて、ウィンドウを閉じることによって。

どちらかの方法があるかどうか知りたい
(a):window.onbeforeunload呼び出しを修正して、そこにAJAX
または
(b):Chromeでウィンドウが閉じたことを判断する他の方法を取得します

24
varatis

回答:

$(window).on('beforeunload', function() {
    var x =logout();
    return x;
});
function logout(){
        jQuery.ajax({
        });
        return 1+3;
}

少しミックスとマッチが、それは私のために働いた。 1 + 3は、ログアウト機能が呼び出されていることを確認します(ポップアップを終了しようとして成功した場合は、4が表示されます)。

14
varatis

より簡単なアプローチを次に示します。

$(window).on('beforeunload', function() {
    return "You should keep this page open.";
});

返されるメッセージは、Chromeが既に表示しているメッセージに追加するものがない場合は空の文字列を含む。

enter image description here

3
Keith

[〜#〜] mdn [〜#〜] によると、

この関数は、EventオブジェクトのreturnValueプロパティに文字列値を割り当て、同じ文字列を返す必要があります。

これは以下です

window.addEventListener( 'beforeunload', function(ev) { 
    return ev.returnValue = 'My reason';
})
2
kisp

69.0.3497.92現在、Chromeは標準を満たしていません。ただし、 バグレポート が提出され、 レビュー があります進捗。

  • Chromeでは、ハンドラーによって返される値ではなく、イベントオブジェクトへの参照によってreturnValueを設定する必要があります。
  • 標準状態 プロンプトを制御するには、イベントをキャンセルするか、戻り値を null以外の値 に設定します。
  • 標準では、作成者はreturnValueの代わりにEvent.preventDefault()を使用する必要があるとしています。
  • 標準状態 ユーザーに表示されるメッセージはカスタマイズできません。
window.addEventListener('beforeunload', function (e) {
    // Cancel the event as stated by the standard.
    e.preventDefault();
    // Chrome requires returnValue to be set.
    e.returnValue = '';
});
    
window.location = 'about:blank';
1
Trevor Karjanis