速報

SageMaker SDKの既定バケットに所有者確認漏れ|成果物の改変を防ぐ更新と点検

CATEGORY

【JavaScript】ブラウザの戻る・進むで表示されたページを判定してリロードする

※本ページのリンクにはプロモーションが含まれています。

【JavaScript】ブラウザの戻る・進むで表示されたページを判定してリロードする

目次

本記事では、JavaScriptでブラウザの戻る・進むで表示されたページを判定し、戻る・進むで表示されたページであればリロードを実行する方法をご紹介しています。ページ遷移時にフェードアウトやスライドインするようなアニメーションを実装しているサイトで、ブラウザの戻るや進むで履歴のページを表示した際にアニメーションの終了状態が残っているようなケースで有効な方法です。

ブラウザの戻る・進むで表示されたページか判定し、該当した場合はページをリロードしたいんだけど良い方法ないかな?

上記の疑問にお答えします。

では、解説していきます。

スポンサーリンク

ブラウザの戻る・進むが取得できるイベントについて

JavaScriptでは、ブラウザの戻る(hitory.back())や進む(history.forward())でページが表示されたかを判定するpageshowというイベントが用意されています。pageshowイベントは下記の状態になった際に発火します。

  • 最初にページを読み込んだ時(イベント発生順はloadが先)
  • 同じウィンドウ、タブ内で他のページから遷移してきた時
  • ブラウザの戻る、進む機能でページに戻ってきた時

タイミングはいくつかありますが、ブラウザの戻る・進む機能でページに戻ってきた時にもイベントが発火するため、pageshowイベントを検知し、ブラウザの戻る・進むでページが表示されたことを判定。その後でページをリロードする処理を実行すれば、本記事の目的は達成できそうです。

参考:https://developer.mozilla.org/ja/docs/Web/API/Window/pageshow_event

ブラウザの戻る・進むで表示されたページか判定する

前項でブラウザの戻る・進むの操作については、pageshowイベントで取得できることがわかりました。しかしながら、pageshowはページの読み込み等にも発火するイベントのため、発火したイベントがブラウザの戻る・進むの操作によるものかを判定する処理が必要になります。ブラウザの戻る・進む操作で表示されたページか判定するには、PerformanceNavigationTimingというインターフェースを使用します。

window.addEventListener('pageshow', () => {
    if(performance.getEntriesByType("navigation")[0].type === 'back_forward'){
        //ここに処理
    }
});

上記ではtypeの比較にはback_forwardを指定していますが、その他には下記を指定することができます。

値説明
navigate読み込みで表示されたページ
reload再読み込みで表示されたページ
back_forwardブラウザの戻る・進むで表示されたページ
prerender<link>のrel="prerender"に指定されたページ

PerformanceNavigationTimingの詳細につきましては下記ページをご参照ください。

参考:https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming
参考:https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/type#value

スポンサーリンク

ブラウザの戻る・進むで表示されたページか判定してリロードする

ここまでの内容でで、pageshowでイベントを取得し、PerformanceNavigationTimingでブラウザの戻る・進むの判定まで実現することができました。ページの再読み込みはlocation.reload()で実装できるため、pageshowイベントを取得し、PerformanceNavigationTimingがブラウザの戻る・進むであれば、location.reloadにてページをリロードする処理追加します。

window.addEventListener('pageshow', () => {
    if(performance.getEntriesByType("navigation")[0].type === 'back_forward'){
        alert('ブラウザの「戻る」または「進む」でページが表示されました。ページをリロードします。');
        location.reload();
    }
});

以上でブラウザの戻る・進むを判定してページをリロードすることが可能となります。

最後に

WebサイトやWebアプリを構築していてブラウザの戻る・進むといった操作を考慮することはあまりないですが、ページ遷移直前にアニメーションを表示するようなサイトの場合、ブラウザの操作によって意図しない表示になるケースが発生します。ブラウザの戻る・進むといった操作はJavaScriptで判定して任意に処理を実行することができます。本記事の内容が、制作のお役に立てれば幸いです!

以上、JavaScriptでブラウザの戻る・進むで表示されたページを判定してリロードする方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、ヒアリングや進行管理から、コーディング、CMSの構築、システム開発、サーバーの構築・保守・運用まで、Webサイト制作の工程を幅広く担当しています。Webサイトは、これまでに100以上の構築・保守を手がけてきました。

個人でもWebサイトの制作・改修やWebアプリの開発・運用を行い、AIを活用した開発にも取り組んでいます。近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
Webサイト構築・保守・運用 / HTML/CSS / JavaScript / PHP / WordPress / サーバー構築・保守・運用 / アプリ開発 / セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
PHP8技術者認定ウィザード
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク