ここでの主な課題は、ユーザーが実際にページを離れる前にJavaScript関数を実行することです。問題は、イベントを処理することです。このイベントをマルチブラウザーシナリオで機能させるには、次を返す必要がonbeforeunload
あるため、ユーザーの選択に反応できません。メッセージとして使用される文字列。各ブラウザは、ユーザーに表示されるカスタムダイアログを作成します。私はあなたが必要とすることをするためのより良いアプローチを見つけていません。基本的に、ブラウザのデフォルトの動作を上書きすることはできません。また、ページをアンロードする必要があるかどうかを示すブール値を返すことはできません。
詳細情報:
MSDNから
window.eventのreturnValueプロパティに文字列が割り当てられると、現在のページにとどまり、割り当てられた文字列を保持するオプションをユーザーに提供するダイアログボックスが表示されます。ダイアログボックスに表示されるデフォルトのステートメント「このページから移動してもよろしいですか?... [OK]を押して続行するか、[キャンセル]を押して現在のページにとどまります。」を削除または変更することはできません。
したがって、この例では、回避策を提案しています。これが最善のアプローチかどうかはわかりませんが、いくつかのオンラインバンクや、Microsoft自体から、サイトにログアウトしたときにこのような動作が見られました。
例:
ASPX
<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
function showConfirmOnLeave() {
return $("#showConfirm").prop("checked");
}
function onLeavePage() {
if (showConfirmOnLeave()) {
return "Don't goo";
}
else {
return undefined;
}
}
$(function () {
if ($("body").attr('onbeforeunload') == null) {
$("body").attr('onbeforeunload', 'return onLeavePage(event)');
}
$(window).unload(function (event) {
if (showConfirmOnLeave()) {
window.open(
'<%: this.ResolveClientUrl("~/CallOnLeave.aspx") %>',
"_blank",
"height=100, location=no, menubar=no, resizable=no, scrollbars=no, status=no, titlebar=no, toolbar=no, width=100, left=1, top=1",
false
);
}
});
});
</script>
<input type="checkbox" id="showConfirm" /> Show confirm on exit?
CallOnLeave.ASPXコードビハインド
protected void Page_Load(object sender, EventArgs e)
{
// add here your custom code, ideally fire a new async thread to execute your commands on the background
}