beforeunload イベントが発生しない場合は、どう対処すれば良いですか?
beforeunload イベントが実行されない場合は、イベントハンドラ内で非同期操作を使用しているか、イベントのデフォルト動作を阻止している可能性があります。解決策は以下の通りです:
- beforeunload イベント処理中では、setTimeout や Promise などの非同期操作の使用を避けてください。このイベントが発生する時点で、ページが既にアクティブ状態を保持できない可能性があるためです。
- beforeunload イベントハンドラ内で preventDefault() メソッドを呼び出さないようにして、デフォルトの動作を妨げないようにしてください。preventDefault() を呼び出すと、ブラウザが処理を無視してページを直接閉じる可能性があります。
- ページの読み込み時にイベントハンドラを早めにバインドしてください。beforeunloadイベントハンドラが必要な時に実行されるようにします。addEventListener()メソッドを使用してイベントハンドラをバインドできます。
window.addEventListener('beforeunload', function(event) {
// 在这里执行您的代码
});
- 戻り値の使用: イベントハンドラーで文字列を返すことで、ブラウザはそれをユーザーに表示してページを離れるかどうかを尋ねます。例:
window.addEventListener('beforeunload', function(event) {
event.returnValue = '您确定要离开此页面吗?';
});
異なるブラウザは、beforeunload イベントの処理方法が異なる可能性があるため、注意が必要です。これらの方法は、一部のブラウザでは機能しない場合があります。特定のニーズに応じて、JavaScriptのunloadイベントを使用したり、コールバック関数を使用して関連操作を実行する必要があるかもしれません。