13
3

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.

ブラウザバックで戻った先の画面でブラウザバックを検知して処理したい

Posted at

ブラウザバックを検知したい

スクリーンショット 2022-10-19 1.49.09.png

送信ボタンを一度押されると、2重送信防止のためボタンを非活性にして操作できないようにすることがあります。
その場合、仮にブラウザバックを行うと非活性のままキャッシュされてしまっているので、リロードしない限りボタンが活性状態へ戻りません

そこで、ブラウザバックを検知してボタンを活性化させる対応を試みました

解決した

sample.js
window.addEventListener('pageshow', イベント);

ページを読み込んだタイミングでイベントを拾えるようにしました。

また、loadイベントとは違ってpageshowイベントでは、キャッシュされたページの場合も対象になります

・同じウィンドウまたはタブの中で、他のページからそのページへ移動してきたとき
・ブラウザーの進む、戻るボタンを利用してこのページに戻ったとき
https://developer.mozilla.org/ja/docs/Web/API/Window/pageshow_event

試して無理だった方法

履歴の変更を加えて強制的にイベントを実行する

結論:イベントを拾うことは可能でした。が、拾いたいタイミングで拾えなかった

スクリーンショット 2022-09-15 15.51.59.png

sample.js
history.replaceState(null, "", null);
window.addEventListener('popstate', function(e) {
  alert('ブラウザバック検知');
});

history.replaceStateは、引数に与えられた情報によって履歴を編集するものです。
popstateイベントはその履歴の変更によって発火します

それを利用し、ブラウザバック時のイベントを検知することを試みました。

が、しかし、、、safari以外のブラウザでは欲しいタイミングでイベントが拾えず断念

ブラウザごとにキャッシュするタイミングが異なるから、挙動に差が出てしまいます

参考

13
3
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
13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?