どうもイハラです。
Javascriptで通常ページ読み込み後に使用するイベントはonloadイベントを使用します。
ですが、ブラウザの戻るボタンを押して前のページに戻った場合はonloadイベントは発火しません。
ブラウザバックではonloadイベントは動きません。
ブラウザバックを検知するのによく使われているpageshow
そこで登場するのがpageshowイベントです。
pageshow イベントは、セッション履歴のエントリのトラバース時に発生します(これは、戻る/進むも、onloadイベント後の初期のページ表示も含みます)。
https://developer.mozilla.org/ja/docs/Web/Events/pageshow
pageshowイベント発火時に2重送信防止を解除されるようにすれば、ブラウザバックしても問題なく再送信することができる…はずが、Safariだけ罠があります。
1回目のブラウザバックにしかpageshowイベントは発火しない
ChromeやIEなどは特に問題ないのですが、実はSafariだけ以下のような問題があります。
- 遷移
- ブラウザバック(pageshowイベント発火)
- 遷移
- ブラウザバック(pageshowイベント発火しない)
Safariだけ2回目以降のブラウザバック時にpageshowイベントが反応しないのです。
ブラウザバックを検知する別の方法
こんなバグがあるとブラウザバックの検知にpageshowが使えない。。
実際このバグを知ってからはpageshowイベントは使わなくなりました。
実はブラウザバックを検知する方法は他にもあります。
今までpageshowイベントで実装してしまっていたものは、すべてこの方法に差し替えました。
一応テストはしていたのですが、複数回ブラウザバックしてチェックしていなかったので、このバグに気づけなかった。。
同じようにpageshowイベントが動かなくて困っている方!たぶんこれが問題だと思います。