11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Safariでブラウザバックしたときに何かしたい

Last updated at Posted at 2017-03-29

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〜だ。

11
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?