iPhoneで「本当にこのフォームを再送信しますか?」

ブラウザバック(戻る)の操作で発生することが多いこの問題ですが、「キャンセル」「送信」の2択となり、どっちを選択したらいいのか迷ったり、不安になる方もいるかと思います。
そこで今回は「本当にこのフォームを再送信しますか?」の意味や、対処の仕方についてご紹介していきます。
「本当にこのフォームを再送信しますか?」の意味
iPhoneのSafariなどでブラウザバックをした際に「本当にこのフォームを再送信しますか?」が表示されますが、これは1つ前のページで送信した情報を再度送信するか?という意味になります。

もう少し専門的な内容に突っ込むと、前ページHTMLでFormのメソッドがpostの通信の場合に発生する問題となります。
「キャンセル」「送信」の2つの選択肢は、一つ前に戻るページのPOST通信を再度再現してリクエストするかどうかの選択肢となります。
つまり「送信」を選択すると再度前ページで入力した情報が再度送信され、「キャンセル」を選択すると送信しない形になります。
キャンセルするとiPhoneのSafariがフリーズする?

キャンセルをすることでそのページを表示するのに必要な情報が足りずに、ページが正常に表示されない可能性があります。
その場合真っ白な画面が表示されるかと思いますが、その画面は閉じて新しい画面で再度訪問していたページをブックマークや検索から開くことで正常に利用できるようになります。
「本当にこのフォームを再送信しますか?」の対処法
1つ前のページが何か分かっている場合は情報が再送信しても問題ない情報かどうかで判断しましょう。
ただの検索ページ

前ページが商品の検索ページで、商品の値段や種類、大きさなどの情報を入力していただけの場合は「本当にこのフォームを再送信しますか?」で「送信」を選択しても問題ないでしょう。
前回表示されたのと、同じ検索結果のページが表示されるはずです。
商品の購入や個人情報の入力などの場合

前ページが商品の購入の決済ページや個人情報の入力ページの場合は「本当にこのフォームを再送信しますか?」の表示では「キャンセル」をした方が無難です。
なぜなら、再送信することで二重登録や二重決済となり後々面倒になる可能性があるためです。
掲示板の投稿やチャットのページ

前ページが掲示板の投稿やチャットのページでも同様に「キャンセル」をした方が無難でしょう。
二重投稿される可能性の回避につながります。
つまりまとめますと、ブラウザバック(戻る)で「本当にこのフォームを再送信しますか?」の表示が出た際には、
- 前ページが検索画面など情報を再度送信しても問題ないようなページは「送信」でも大丈夫
- 前ページが決済や投稿など二重にデータが送信されるとまずいページは「キャンセル」が無難
「本当にこのフォームを再送信しますか?」を表示させない回避策はある?

iPhoneを使っているユーザー側で回避する方法はないですが、ブラウザバックをせずに前ページでアクセスしているサイトのトップページから再度操作をするというのが一番健全な方法になります。
よく使うサイトであればトップページをブックマークしておいて、トップページから再度操作するようにしましょう。