正しい方法はただの文字列を返すことですリンクありメッセージを表示します。 MDN has this to say。
機能は、それで、あなたが求める行動のためのあなたのonbeforeunload
機能だけで(それを結合と同じになりEventオブジェクトののReturnValueプロパティに文字列値を代入して、同じ文字列に
を返す必要がありますjQueryを使って、他のイベントが行うようにonbeforeunloadは、複数のイベントリスナーをサポートしていない、特に以来)
window.onbeforeunload = function() {
return "Are you sure?";
};
しかし皮肉なことに、Firefoxはセキュリティ上の目的のためにこの機能をサポートしていません。
Firefox 4以降では、返された文字列はユーザーに表示されません。 bug 588292を参照してください。
編集:私はバグレポートの詳細を読む。この決定の主な理由は、「1.サイト提供のテキストを削除することです。これはセキュリティ上の問題です(ブラウザダイアログの信頼できないテキスト)」。私は彼らがalert
についてどのように感じるのだろうか?
ほとんどの最新のブラウザ(Chome、IE 9+以前、Opera、私は確信しています)は、表示する文字列を返す以外に、onbeforeunload
関数で何をしようとしているのか無視します。これは、ユーザーのブラウザをハイジャックすること、ポップアップを開くこと、ユーザーに別の悪意のあるドメインなどを指すことによってナビゲーションの試行を無効にすることです。 のものはonbeforeunload
で許可されていませんが、イベントの伝播やページの移動に関連して、サンプルコードで試したことが主なものです。そのFFバグレポートのdeep in the commentsから、ユーザーoyasumiは、FF 4以上のユーザーにカスタムテキストを表示するための回避策を使ってこのjsFiddleへのリンクを投稿します:http://jsfiddle.net/ecmanaut/hQ3AQ/alert()
を呼び出すことは明らかです。onbeforeunload
でも明らかです。ブラウザ/アプリケーション/ OS /公式の見た目のダイアログにカスタムテキストを表示するという「バグ」の「修正」の元々の理由でした。
できません。ユーザーの入力がなくてもナビゲーションを停止できると、ブラウジングの仕方が損なわれます。 – jbabey
私は同じ感情を持っています。 Firefoxの例では、セキュリティ上の理由から意図的にwindow.location.hrefのオーバーライドをブロックしています。 [bugzillaのこのバグ](https://bugzilla.mozilla.org/show_bug.cgi?id=736694)を参照してください。 – kamituel
実際は可能です。それ以外の場合は、 "変更を残して変更を失う"かどうかを尋ねるサイトは存在しません。 beforeunloadイベントが存在し、サーフィンしなくてもウィンドウを閉じてもキャッチします。 – Alfabravo