window.addEventListener('beforeunload', function(){
if (execUnload) {
if (confirm('移動します\n[OK]なら移動、[キャンセル]なら移動しません')) {
return true;
} else {
return false;
}
}
}, true);
上記のスクリプトでは、キャンセルしても遷移してしまいます。どうすればいいのでしょうか?
Collection & Copy - ページ遷移前に確認をする、onbeforeunload
一部のブラウザでは動かないみたいですが、こちらの内容でどうでしょうか。
window.onbeforeunload = function(event){ event = event || window.event; event.returnValue = '<ユーザー定義の確認メッセージ>?'; }
onbeforeunloadハンドラの戻り値は何の意味も持ちません。
onbeforeunloadハンドラでウィンドウのクローズをキャンセルする場合は、event.returnValueに文字列を入れます。
そうすると、IEがその文字列を表示して本当に閉じるかどうかのダイアログを表示してくれます。(このダイアログでキャンセルを押せばクローズしません)
サンプル
window.addEventListener('beforeunload', function(){ if (execUnload) { event.returnValue='移動します'; } }, true);
これは、セキュリティ上の問題でこのような仕様になっていると思われます。例えば悪質なポップアップを出すようなWebサイトが、ウィンドウを閉じられないよう制御できるとしたら、ユーザが永久に閉じられないような悪質なページが作成できてしまいます。そのため閉じるか閉じないかのダイアログの制御は必ずIEにさせて、ユーザの意思で閉じるか閉じないかを選択できるようにしている(スクリプトからは表示する文字列しか指定できない)と思います。
なるほど。そういうことでしたか。
ありがとうございます。
ためになります。ありがとうございます。