Safariでブラウザバックしたときにリロードが走らず、前画面などで二重サブミット処理を実装していたとき、最送信できない→設定していたフラグを戻すとういう処理を行いたかった。
試したイベントなど
pageshow
window.onpageshow = function() {
// do
};
window.addEventListener('pageshow', function() {
// do
}, false);
// jQuery
$(window).on('pageshow', function() {
// do
});
pageshowで実装する方法があるが、これだと1回目のブラウザバックしか検知しなかった。
popstate
window.onpopstate = function() {
// do
};
window.addEventListener('popstate', function() {
// do
}, false);
// jQuery
$(window).on('popstate', function() {
// do
});
popstateを使えば検知できるがhisotoryのstateを先に変更しておかなければならない。
replacestate
history.replaceState(null, document.getElementsByTagName('title')[0].innerHTML, null);
pushstateでよく情報が出て来るが、履歴に追加→履歴が増えてしまうので、replacestateで実装。
結論
history.replaceState(null, document.getElementsByTagName('title')[0].innerHTML, null);
window.addEventListener('popstate', function() {
// do
}, false);
hisotoryをリプレイスさせておき、次のページへ遷移→ブラウザバックでpopstateを検知して処理を実行させた。
IE10〜だ。