onunload でハマりました

JavaScript の onunload でハマりました。

やりたかった事は、編集時のレコード単位のロックです。
編集画面を表示する際にロックして、編集画面を抜ける際にロックを解除しようとしました。

しかし、ブラウザの再読み込みをしてみると、ロックが解除されていました。

プログラムレベルでデバッグしましたが、問題はありませんでした。
どうも想定した動作順序になっていないようです。

普通に、表示中の画面のonunload > 次の画面の表示、と想定していました。
しかし、次の画面の表示 > 表示中の画面のonunload、の順に処理がされています。

まあ、次の画面を早く表示するための仕様と考えれば納得できますが、回避策となるとonbeforeunloadを使うぐらいでしょうか。
しかし、onbeforeunloadは更新の保存確認用に使用しており、ページの移動をキャンセル出来るようにしています。
onbeforeunloadイベントではページの移動がキャンセルされたかどうかは検出できません。

結局、各ページを表示する際にロックの制御をするようにしました。

JavaScriptではイベントの発生順序を考慮して処理を設計する必要があります。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください