web-dev-qa-db-ja.com

ChromeおよびFirefoxでjQuery onbeforeunloadが機能しないのはなぜですか?

jQuery onbeforeunloadはChromeおよびFirefoxでは機能しません。IEおよびSafariでは正しく機能します。

jQuery(window).bind('onbeforeunload' ,function () {
    mymethod();
});

上記のコードは、IEおよびSafariでは正常に機能しますが、FirefoxおよびChromeでは機能しません。

12
user1990525

MDNの window.onbeforeunload リファレンスによると、

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

観察 this jsFiddle

jQuery(window).bind('beforeunload', function(e) {
    var message = "Why are you leaving?";
    e.returnValue = message;
    return message;
});

特定のイベントは無視される場合があることに注意してください

[...] HTML5仕様には、window.showModalDialog()、window.alert()、window.confirm()、およびwindowの呼び出しが記載されています.Prompt()メソッドは、このイベント中は無視されます

AJAXに関する重要な注意:

AJAXを呼び出す場合、ユーザーがリクエストを離れるときに、リクエストが完了する前にキャンセル(中断)される場合があります。asyncオプションをオフにして、これを回避する方法。例:

$.ajax({
    url: "/",
    type: "GET",
    async: false
});

2017年更新:

多くのブラウザーは、ユーザーが離れるときにアラートダイアログでカスタムテキストをサポートしなくなりました。

Chrome、Firefox、OperaおよびSafariの最新バージョンでは、カスタムテキストは表示されません。

EdgeとIEはまだこれをサポートしています。

37
Rowan Freeman