5
1

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 1 year has passed since last update.

Safariでの戻るボタン使用時にJavaScriptをリセットする方法

Posted at

課題

ウェブ開発において、ブラウザの戻る操作により以前のページに遷移した際に、JavaScriptの状態がそのまま保持されてしまうことは、しばしば困ることの一つです。この振る舞いは、特にSafariブラウザにおいて一般的です。

具体的な困る事例として、例えばショッピングサイトでユーザーが商品をカートに追加した後、別のページに移動してから戻るボタンで商品ページに戻ったときを考えてみましょう。

ここで問題となるのは、ブラウザがJavaScriptの状態を保存してしまうため、カートに追加された商品が表示上はカートから削除されたままになってしまうことです。この状況はユーザーに混乱をもたらし、その結果ショッピング体験が損なわれる可能性があります。

この記事では、このような問題を解決するための手段を提案します。

調査結果

調査の結果、pageshowイベントというブラウザの機能を利用することで、この問題に対処できることがわかりました。pageshowイベントは、ページがバック/フォワード キャッシュからロードされたときに発生します。

このイベントにはpersistedというプロパティが含まれています。このプロパティがtrueである場合、ページがバック/フォワード キャッシュからロードされていることが示されます。この性質を利用することで、ページがキャッシュからロードされた場合にJavaScriptの再実行を強制することが可能となります。

手順・実装内容

以下のスニペットは、ページがバック/フォワード キャッシュからロードされた場合にページをリロードするJavaScriptの実装例です:

window.addEventListener('pageshow', function(event) {
  if (event.persisted) {
    window.location.reload();
  }
});

このコードをページに追加すると、ユーザーがブラウザの「戻る」を使用してページに戻るとき、そのページが自動的にリロードされます。その結果、ページ上のJavaScriptは再実行されることになり、常に初期状態から実行されるようになります。

注意点

この方法はページの読み込み時間が増える可能性があり、ユーザーエクスペリエンスに影響を与えるかもしれません。したがって、この方法を採用する前に、サイトのパフォーマンスとユーザーエクスペリエンスにどのような影響が出るかを評価することをお勧めします。

5
1
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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?