window.onbeforeunload
を使用して、閉じるイベントが発生したときに確認ダイアログをポップアップ表示していますが、確認ダイアログはページの更新時に表示され、ページを閉じるときに実行されません。
JavaScriptコードは次のとおりです。
<script language="JavaScript">
window.onbeforeunload = confirmWinClose();
function confirmWinClose() {
var confirmClose = confirm('Close?');
return confirmClose;
}
</script>
Chrome、Firefox、Internet Explorerで試してみました。
あなたのコードの問題:
on refresh the page is unloaded and then reloaded
であるため、関数はrefresh
のときに呼び出されます。
ソリューションでは、function
をwindow.onbeforeunload
に割り当てていないが、書き込み時にreturn value of the function
を割り当てていることにも注意してください。
window.onbeforeunload = confirmWinClose();
これは、割り当てが行われるたびに(JavaScriptでの配置場所に基づいて)関数を実行する場合もあります。例えば.
function confirmWinClose() {
var confirmClose = confirm('Close?');
return confirmClose;
}
window.onbeforeunload = confirmWinClose();
上記のコードは、このjsが読み込まれるたびにconfirmWinClose
関数を実行します。
(呼び出し後に関数を定義したのであなたのケースではないので、ロード時に実行されませんが、これを覚えておく必要があります)
解決策:
以下の解決策はclose
でも機能しています
あなたの解決策の代わりに、私はこれを試しました
JS:
window.onbeforeunload = function() {
var confirmClose = confirm('Close?');
return confirmClose;
}
または
window.onbeforeunload = confirmWinClose; //note the absence of calling parantheses
function confirmWinClose() {
var confirmClose = confirm('Close?');
return confirmClose;
}
これは期待どおりに機能します。
また、return
から明示的にonbeforeunload
を取得する必要があることにも注意してください。
関数を呼び出さなければならない場合でも、
<script>
window.onbeforeunload = function(e) {
callSomeFunction();
return null;
};
</script>
完全な解決策はありませんが、F5キーをインターセプトできます(ユーザーがブラウザの更新ボタンをクリックしてもインターセプトされません...)
var isRefresh = false;
// with jquery
$(function() {
$(document).on("keydown", function(e) {
if (e.which === 116)
{
isRefresh = true;
}
});
});
window.onbeforeunload = function() {
if (! isRefresh)
{
return confirm ('Close ?');
}
return false;
};
これを試してみてください。イベントが発生したときに実行する必要があるonloadにメソッドを割り当てているため、オブジェクトのようにする必要があります。詳細な説明についてはリンクを参照してください- var functionName = function(){} vs function functionName(){}
window.onbeforeunload = confirmWinClose;
function confirmWinClose () {
var confirmClose = confirm('Close?');
return confirmClose;
};
とにかくテキストを表示したいだけなので、期待どおりにonbeforeunloadを使用すると、文字列が返されるだけですか?
<script language="JavaScript">
window.onbeforeunload = confirmWinClose;
function confirmWinClose() {return "close?";}
</script>