10
13

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 3 years have passed since last update.

Vue.jsでブラウザバックを検知する方法

Last updated at Posted at 2021-08-02

概要

ブラウザバックを検知して、Vue.jsのプロパティに論理値をセットすることによってVueコンポーネント内でブラウザバックしたかどうかを判定できるようにする。

プログラム

Vue.jsのプロパティに「$browserBackFlg」をセット

app.js
// ブラウザバックを検知してコンポーネントで「this.$browserBackFlg」で使用できるようにする。
Vue.prototype.$browserBackFlg = false
history.replaceState(null, '', null)
window.addEventListener('popstate', function() {
  Vue.prototype.$browserBackFlg = true

  window.setTimeout(() => {
    Vue.prototype.$browserBackFlg = false
  }, 500)
})

history.replaceState(stateObj, title, [url])

現在の履歴を編集し、メソッドに渡された stateObjtitleURLパラメータによって置き換えます。
強制的に履歴を残すことで、履歴が変更されたことを検知させます。
https://developer.mozilla.org/ja/docs/Web/API/History/replaceState

window.addEventListener('popstate', function() {})

popstateをイベントリスナーに登録することにより、履歴項目が変わるたびにウィンドウに発行されます。

window.setTimeout(() => , 500)

window.setTimeoutを使用して500ミリ秒後に「$browserBackFlg」をfalseにします。
これがないと、永遠に「$browserBackFlg」がtrueのままになってしまいます。

セットした「$browserBackFlg」を使ってVueコンポーネント内でブラウザバック検知

Home.vue
<script>
export default {
  created() {
    if (this.$browserBackFlg) {
      // ブラウザバック時の処理
    }
    else {
      // ブラウザバック時でなく普通のページ遷移のときの処理
    }
  }
}
</script>
10
13
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
10
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?