Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
Since January 2026, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
ナビゲーション API を使用すると、ブラウザーのナビゲーション操作を開始、介入、管理することができます。同時に、アプリケーションの履歴項目を確認することも可能です。これは、履歴 API や window.location といった従来のウェブプラットフォーム機能の後継であり、それらの欠点を解消するとともに、特に単一ページアプリケーション (SPA) のニーズに対応することを目的としています。
SPA では、ページテンプレートは使用中に変更されず、ユーザーが異なるページや機能にアクセスする際にコンテンツが動的に書き換えられる傾向があります。その結果、ブラウザーには1つのページしか読み込まれないため、閲覧履歴内の異なる場所を行き来するという、ユーザーが期待する使い勝手が損なわれてしまいます。この問題は履歴 API によってある程度解決可能ですが、それは SPA のニーズに合わせて設計されたものではありません。ナビゲーション API は、そのギャップを埋めることを目的としています。
この API には、Window.navigation プロパティを介してアクセスします。このプロパティは、グローバルな Navigation オブジェクトへの参照を返します。それぞれの window オブジェクトには、それぞれ対応する navigation インスタンスがあります。
navigation インターフェイスにはいくつかの関連付けられたイベントがありますが、中でも特に注目すべきは navigate イベントです。これは、あらゆる種類のナビゲーションが開始された際に発生します。つまり、すべてのページナビゲーションを一元的に制御できるため、SPA フレームワークにおけるルーティング機能に最適です。(History API の場合とは異なり、履歴 API ではすべてのナビゲーションを検出して対応することが難しい場合があります。) navigate イベントハンドラーには、NavigateEvent オブジェクトが渡されます。このオブジェクトには、ナビゲーションの出力先や種類、POST フォームデータやダウンロードリクエストが含まれているかどうかなど、詳細な情報が含まれています。
NavigateEvent オブジェクトには、2 つメソッドも提供されています。
ナビゲーションが開始され、intercept() のハンドラーが呼び出されると、NavigationTransition オブジェクトのインスタンスが作成されます(Navigation.transition 経由でアクセス可能)。これを使用して、進行中のナビゲーションのプロセスを追跡することができます。
メモ: この文脈における "transition" とは、ある履歴項目と別の履歴項目との間の遷移を指します。CSS のトランジションとは関連ありません。
メモ: preventDefault() を呼び出すことでも、ほとんどの種類のナビゲーションにおいて、ナビゲーションを完全に停止させることができます。ただし、トラバースナビゲーションの中止機能はまだ実装されていません。
intercept() ハンドラー関数によって返されたプロミスが履行されると、Navigation オブジェクトの navigatesuccess イベントが発生し、ナビゲーションが正常に完了した後にクリーンアップコードを実行できるようになります。プロミスが拒否された場合、つまりナビゲーションが失敗した場合は、代わりに navigateerror が発生し、失敗時の処理を適切に行うことができます。また、ナビゲーションメソッド(Navigation.navigate() など)の返値には finished プロパティがあり、これは前述のイベントが発生するのと同時に履行または拒否されるため、成功および失敗のケースを処理するための別の手段となります。
メモ: ナビゲーション API が利用できるようになる前は、同様の処理を行うには、リンクのすべてのクリックイベントを監視し、e.preventDefault() を実行し、適切な History.pushState() 呼び出しを行い、新しい URL に基づいてページ表示を設定する必要がありました。また、この方法ではすべてのナビゲーションに対応できるわけではなく、ユーザーがリンクをクリックした場合のみ対応可能でした。
ユーザーがアプリケーション内を移動する際、新しい場所へ移動するたびに、ナビゲーション履歴の項目が作成されます。それぞれの履歴項目は、固有の NavigationHistoryEntry オブジェクトのインスタンスとして表されます。これらは、項目の一意のキー、URL、状態情報などのいくつかのプロパティを含んでいます。Navigation.currentEntry を使用すると、ユーザーが現在表示している項目を取得でき、Navigation.entries() を使用すると、既存のすべての履歴項目の一覧を取得できます。それぞれの NavigationHistoryEntry オブジェクトには、項目がブラウザーの履歴から削除された際に発生する dispose イベントがあります。例えば、ユーザーが 3 回戻る操作を行い、その後別の場所へ進むと、その 3 つの履歴項目は破棄されます。
メモ: ナビゲーション API は、現在のページと同じオリジンを持つ、現在の閲覧コンテキスト内で生成された履歴項目のみを公開します(例えば、埋め込み <iframe> 内のナビゲーションや、オリジンを越えるナビゲーションは対象外です)。これにより、アプリ専用の正確な過去の履歴項目一覧が提供されます。この方法により、履歴の探索は、以前の履歴 API による方法に比べて、はるかに安定した処理が可能になります。
Navigation オブジェクトには、ナビゲーション履歴の更新や移動に必要なすべてのメソッドが含まれています。
navigate()新しい URL に移動し、新しいナビゲーション履歴項目を作成します。
reload()現在のナビゲーション履歴項目を再読み込みします。
back()可能であれば、前回のナビゲーション履歴項目に移動します。
forward()可能であれば、次のナビゲーション履歴項目に移動します。
traverseTo()キー値によって識別される特定のナビゲーション履歴項目に移動します。このキー値は、該当する項目の NavigationHistoryEntry.key プロパティから取得されます。
以上の各メソッドは、2 つのプロミス ({ committed, finished }) を含むオブジェクトを返します。これにより、呼び出し元関数は、以下のいずれかが完了するまで、次のアクションを実行するのを待つことができます。
ナビゲーション API を使用すると、それぞれの履歴項目に状態を保存することができます。これは開発者が定義する情報であり、自由に設定可能です。例えば、ビューが閲覧された回数を記録する visitCount プロパティや、UI の状態に関連する複数のプロパティを含むオブジェクトを保存することで、ユーザーがそのビューに戻った際に状態を復元できるようにすることができます。
NavigationHistoryEntry の状態を取得するには、その getState() メソッドを呼び出します。初期状態では undefined ですが、項目に状態情報が設定されると、前回設定された状態情報が返されます。
状態の設定は、もう少し複雑です。状態の値を取得して直接更新することはできません。項目に格納されているコピーは変更されないからです。その代わりに、navigate() または reload() を実行する際に更新します。それぞれにはオプションで options オブジェクトの引数を渡すことができ、その中に state プロパティを記載することで、履歴項目に設定する新しい状態を指定できます。これらのナビゲーションが実行されると、状態の変更が自動的に適用されます。
ただし、場合によっては、状態の変化がナビゲーションや再読み込みとは無関係になることもあります。例えば、ページに展開・折りたたみ可能な <details> 要素が含まれている場合、ユーザーがページに戻ってきたときやブラウザーを再起動したときに状態を復元できるよう、展開/折りたたみ状態を履歴項目に保存しておきたい場合があります。このようなケースは、Navigation.updateCurrentEntry() を使用して処理します。現在の項目の変更が完了すると、currententrychange イベントが発生します。
ナビゲーション API には、いくつかの認識されている制限があります。
navigate イベントのイベントオブジェクトです。このイベントは、あらゆる種類のナビゲーションが開始された際に発生します。このオブジェクトが提供する情報により、そのナビゲーションに関する情報にアクセスできます。特に注目すべきは intercept() であり、これを使用することで、ナビゲーションが開始された際の動作を制御することができます。
Navigation現在の window に対するすべてのナビゲーション操作を、一元的に制御することができます。これには、プログラムによるナビゲーションの開始、ナビゲーション履歴項目の確認、およびナビゲーションが現れたときの管理などが含まれます。
NavigationActivation直近の文書間のナビゲーションを表します。これには、ナビゲーションの種類、および現在と出力先の文書履歴項目が含まれます。
NavigationCurrentEntryChangeEventcurrententrychange イベント用のイベントオブジェクトです。このイベントは、Navigation.currentEntry が変更された際に発生します。このオブジェクトを使用すると、ナビゲーションの型や、移動元の前回の履歴項目にアクセスすることができます。
NavigationDestination現在のナビゲーションで移動先の出力先を表します。
NavigationHistoryEntry単一のナビゲーション履歴項目を表します。
NavigationPrecommitControllerunsupported templ: domxref(「navigateevent. メソッド呼び出しの precommitHandler コールバックに渡すと、ナビゲーションの事前コミットハンドラーのリダイレクト動作を定義します。
NavigationTransition現在進行中のナビゲーションを表します。
現在の window に関連付けられた Navigation オブジェクトを返します。これがナビゲーション API のエントリーポイントです。
メモ: ナビゲーション API のライブデモ (ソースを表示) を確認してください。
このナビゲーションの介入の例では、handler() 関数はまず記事コンテンツを取得して表示しますが、その後、補助コンテンツも取得して表示します。補助コンテンツが表示されるまで待つのではなく、メインの記事コンテンツが利用できる次第、ページをスクロールしてユーザーが操作できるようにするのが意味があります。この目的で、2 つの処理の間に scroll() の呼び出しを追加しました。
または
あるいは、その状態がナビゲーションや再読み込みとは無関係である場合
| HTML # navigation-api |
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2026年5月21日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.