移動を確認するために使用する正しい方法onbeforeunload
は、表示したいメッセージの文字列を返すことです。MDN はこう言います。
関数は文字列値を Event オブジェクトの returnValue プロパティに割り当て、同じ文字列を返す必要があります。
したがって、onbeforeunload
要求する動作の関数は次のようになります(特にonbeforeunloadは他のイベントのように複数のイベントリスナーをサポートしていないため、jqueryでバインドするのと同じです)
window.onbeforeunload = function() {
return "Are you sure?";
};
しかし皮肉なことに、Firefox はセキュリティ上の理由からこれをサポートしていません。
Firefox 4 以降では、返された文字列がユーザーに表示されないことに注意してください。バグ 588292を参照してください。
編集:バグレポートをもっと読みました。この決定の主な理由は次のとおりです。「1.これはセキュリティ上の問題であるため、サイト提供のテキストを削除します(ブラウザダイアログの信頼できないテキスト)」。彼らはどのように感じているのだろうかalert
?
最近のほとんどのブラウザー (Chome、IE 9 以降、および Opera は確かに知っています) はonbeforeunload
、表示用の文字列を返す以外の関数で実行しようとすることをすべて無視します。これは、ユーザーのブラウザーのハイジャック、ポップアップの表示、ユーザーを別のドメイン、可能性のある悪意のあるドメインに誘導することによるナビゲーション試行の無効化などを防ぐためです。
編集2:私は明らかに間違っていました。で許可されていないものはいくつかありonbeforeunload
ますが、それらは主に、サンプル コードで試したものの種類であり、イベントの伝播とページ ナビゲーションに関係しています。その FF バグ レポートのコメントの奥深くから、ユーザー oyasumiがこのjsFiddleへのリンクを投稿し、カスタム テキストを FF 4+ ユーザーに表示するための回避策を示します: http://jsfiddle.net/ecmanaut/hQ3AQ/これは、「バグ」「修正」の元の理由であるブラウザ/アプリケーション/OS/公式に見えるダイアログにカスタムテキストを表示することを陽気に行っていますalert()
。onbeforeunload