| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/API/Navigation_API | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Seit Januar 2026 funktioniert diese Funktion auf aktuellen Gerten und in aktuellen Browserversionen. Auf lteren Gerten oder in lteren Browsern funktioniert sie mglicherweise nicht.
Die Navigation API bietet die Mglichkeit, Navigationsaktionen des Browsers zu initiieren, abzufangen und zu verwalten. Sie kann auch die Historieneintrge einer Anwendung untersuchen. Dies ist der Nachfolger frherer Webplattform-Features wie der History API und window.location, die ihre Mngel behebt und speziell auf die Bedrfnisse von Single-Page-Anwendungen (SPAs) ausgerichtet ist.
In SPAs bleibt die Seitenschablone whrend der Nutzung normalerweise gleich, und der Inhalt wird dynamisch neu geschrieben, wenn der Benutzer verschiedene Seiten oder Funktionen besucht. Infolgedessen wird im Browser nur eine einzige, individuelle Seite geladen, was die erwartete Benutzererfahrung des Navigierens zwischen verschiedenen Positionen in der Verlaufshistorie strt. Dieses Problem kann bis zu einem gewissen Grad ber die History API gelst werden, aber sie ist nicht fr die Bedrfnisse von SPAs konzipiert. Die Navigation API soll diese Lcke schlieen.
Auf die API wird ber die Eigenschaft Window.navigation zugegriffen, die eine Referenz auf ein globales Navigation Objekt zurckgibt. Jedes window Objekt hat seine eigene entsprechende navigation Instanz.
Die navigation Schnittstelle verfgt ber mehrere zugehrige Ereignisse, wobei das navigate Ereignis das bemerkenswerteste ist. Dies wird ausgelst, wenn jegliche Art von Navigation initiiert wird, was bedeutet, dass Sie alle Seitennavigationen von einem zentralen Punkt aus steuern knnen, ideal fr die Routing-Funktionalitt in SPA-Frameworks. (Dies ist nicht der Fall bei der History API, bei der es manchmal schwierig ist, alle Navigationsvorgnge zu erkennen und zu reagieren.) Der navigate Ereignis-Handler bekommt ein NavigateEvent Objekt bergeben, das detaillierte Informationen enthlt, einschlielich Details ber das Navigationsziel, Typ, ob es POST Formulardaten oder eine Download-Anfrage enthlt und mehr.
Das NavigateEvent Objekt bietet auch zwei Methoden:
intercept() ermglicht es Ihnen, benutzerdefiniertes Verhalten fr Navigationen zu spezifizieren und kann die folgenden Argumente verwenden:
scroll() ermglicht es Ihnen, das Scrollverhalten des Browsers manuell zu initiieren (z. B. zu einem Fragmentbezeichner in der URL), wenn es fr Ihren Code sinnvoll ist, anstatt darauf zu warten, dass der Browser es automatisch behandelt.Sobald eine Navigation initiiert wird und Ihr intercept() Handler aufgerufen wird, wird eine NavigationTransition Objektinstanz erstellt (zugnglich ber Navigation.transition), die verwendet werden kann, um den Vorgang der laufenden Navigation zu verfolgen.
Hinweis: In diesem Kontext bezieht "bergang" sich auf den bergang zwischen einem Historieneintrag und einem anderen. Es hat nichts mit CSS-bergngen zu tun.
Hinweis:
Sie knnen auch preventDefault() aufrufen, um die Navigation vollstndig fr die meisten Navigationstypen zu stoppen; die Stornierung von Vor-/Rckwrtsnavigationen ist noch nicht implementiert.
Wenn die von den intercept() Handler-Funktionen zurckgegebenen Versprechen erfllt werden, wird das navigatesuccess Ereignis des Navigation Objekts ausgelst, was es Ihnen ermglicht, Bereinigungscode auszufhren, nachdem eine erfolgreiche Navigation abgeschlossen wurde. Wenn sie abgelehnt werden, bedeutet dies, dass die Navigation fehlgeschlagen ist, wird stattdessen navigateerror ausgelst, was es Ihnen ermglicht, den Fehlerfall elegant zu behandeln. Es gibt auch eine finished Eigenschaft im Rckgabewert der Navigationsmethoden (wie Navigation.navigate()), die sich gleichzeitig mit den oben genannten Ereignissen erfllt oder abgelehnt wird, was einen weiteren Pfad zur Behandlung der Erfolgs- und Fehlerflle bietet.
Hinweis:
Bevor die Navigation API verfgbar war, htten Sie etwas hnliches tun mssen, indem Sie auf alle Klickereignisse auf Links lauschen, e.preventDefault() ausfhren, den entsprechenden History.pushState() Aufruf ausfhren und dann die Seitenansicht basierend auf der neuen URL einrichten. Und dies wrde nicht alle Navigationen abdecken nur vom Benutzer initiierte Link-Klicks.
Whrend der Benutzer durch Ihre Anwendung navigiert, fhrt jede neue aufgerufene Position zur Erstellung eines Navigationseintrags in der Historie. Jeder Eintrag in der Historie wird durch ein separates NavigationHistoryEntry Objekt dargestellt. Diese enthalten mehrere Eigenschaften wie den Schlssel des Eintrags, die URL und Statusinformationen. Sie knnen den Eintrag abrufen, auf dem sich der Benutzer gerade befindet, indem Sie Navigation.currentEntry aufrufen, und ein Array aller vorhandenen Eintrge in der Historie mit Navigation.entries(). Jedes NavigationHistoryEntry Objekt hat ein dispose Ereignis, das ausgelst wird, wenn der Eintrag nicht mehr Teil der Browserverlaufshistorie ist. Zum Beispiel, wenn der Benutzer dreimal zurckgeht und dann woanders hin navigiert, werden diese drei Eintrge in der Historie entsorgt.
Hinweis:
Die Navigation API gibt nur Historieneintrge preis, die im aktuellen Browserkontext erstellt wurden und denselben Ursprung wie die aktuelle Seite haben (z. B. nicht Navigationen innerhalb eingebetteter <iframe>s oder seitenbergreifende Navigationen), was eine genaue Liste aller vorherigen Historieneintrge nur fr Ihre App bereitstellt. Dies macht das Durchsuchen der Historie zu einem viel weniger zerbrechlichen Unterfangen als mit der lteren History API.
Das Navigation Objekt enthlt alle Methoden, die Sie bentigen, um den Verlauf der Navigation zu aktualisieren und zu durchlaufen:
navigate()Navigiert zu einer neuen URL und erstellt einen neuen Eintrag in der Navigation-Historie.
reload()Ldt den aktuellen Navigationseintrag erneut.
back()Navigiert zum vorherigen Eintrag in der Navigation-Historie, falls dies mglich ist.
forward()Navigiert zum nchsten Eintrag in der Navigation-Historie, falls dies mglich ist.
traverseTo()Navigiert zu einem spezifischen Navigationseintrag der Historie, der durch seinen Schlsselwert identifiziert wird, den Sie ber die entsprechende NavigationHistoryEntry.key Eigenschaft erhalten.
Jede der oben genannten Methoden gibt ein Objekt zurck, das zwei Versprechen enthlt { committed, finished }. Dies ermglicht es der aufrufenden Funktion, mit weiteren Aktionen zu warten bis:
committed erfllt ist, was bedeutet, dass die sichtbare URL gendert wurde und ein neuer NavigationHistoryEntry erstellt wurde.finished erfllt ist, was bedeutet, dass alle Versprechen, die von Ihrem intercept() Handler zurckgegeben wurden, erfllt sind. Dies entspricht dem Erfllen des NavigationTransition.finished Versprechens, wenn das navigatesuccess Ereignis ausgelst wird, wie zuvor erwhnt.Die Navigation API ermglicht es Ihnen, Status auf jedem Eintrag in der Historie zu speichern. Dabei handelt es sich um entwicklerdefinierte Informationen es kann alles sein, was Sie mchten. Zum Beispiel knnten Sie eine visitCount Eigenschaft speichern, die die Anzahl der Besuche einer Ansicht aufzeichnet, oder ein Objekt, das mehrere Eigenschaften des UI-Status enthlt, sodass der Status wiederhergestellt werden kann, wenn ein Benutzer zu dieser Ansicht zurckkehrt.
Um den Status eines NavigationHistoryEntry abzurufen, rufen Sie die getState() Methode auf. Sie ist anfangs undefined, aber wenn Statusinformationen auf dem Eintrag gesetzt werden, wird sie die zuvor gesetzten Statusinformationen zurckgeben.
Das Setzen des Status ist etwas nuancierter. Sie knnen den Wert des Status nicht abrufen und dann direkt aktualisieren die im Eintrag gespeicherte Kopie wird sich nicht ndern. Stattdessen aktualisieren Sie es, whrend Sie eine navigate() oder reload() ausfhren jede davon nimmt optional ein Optionsobjekt-Parameter, das eine state Eigenschaft enthlt, die den neuen Status enthlt, der auf den Historieneintrag gesetzt werden soll. Wenn diese Navigationen festgeschrieben werden, wird die Statusnderung automatisch bernommen.
In einigen Fllen erfolgt jedoch eine Statusnderung unabhngig von einer Navigation oder einem Neuladen zum Beispiel, wenn eine Seite ein erweiterbares/zusammenklappbares <details> Element enthlt. In diesem Fall mchten Sie mglicherweise den erweiterten/zusammengeklappten Zustand in Ihrem Historieneintrag speichern, sodass Sie diesen wiederherstellen knnen, wenn der Benutzer zur Seite zurckkehrt oder seinen Browser neu startet. Solche Flle werden mit Navigation.updateCurrentEntry() behandelt. Das currententrychange wird ausgelst, wenn die aktuelle Eintragsnderung abgeschlossen ist.
Es gibt einige wahrgenommene Einschrnkungen bei der Navigation API:
navigate Ereignis beim ersten Laden einer Seite aus. Dies knnte fr Websites, die Server-Side Rendering (SSR) verwenden, in Ordnung sein Ihr Server knnte den korrekten Startzustand zurckgeben, was der schnellste Weg ist, um Inhalte zu Ihren Benutzern zu bringen. Aber Sites, die clientseitigen Code verwenden, um ihre Seiten zu erstellen, bentigen mglicherweise eine zustzliche Funktion zur Initialisierung der Seite.<iframe>. Dies hat einige interessante Implikationen, die in der Spezifikation weiter dokumentiert sind, aber in der Praxis wird es Verwirrung bei Entwicklern reduzieren. Die vorherige History API hat mehrere verwirrende Randflle, wie etwa die Untersttzung fr Frames, die die Navigation API von Anfang an behandelt.NavigateEvent Ereignisobjekt fr das navigate Ereignis, das ausgelst wird, wenn jede Art von Navigation initiiert wird. Es bietet Zugriff auf Informationen ber diese Navigation und insbesondere auf intercept(), das es Ihnen ermglicht zu steuern, was passiert, wenn die Navigation initiiert wird.
Navigation Ermglicht die Kontrolle ber alle Navigationsaktionen fr das aktuelle window an einem zentralen Ort, einschlielich der programmgesteuerten Initialisierung von Navigationen, der Untersuchung von Navigationseintrgen der Historie und der Verwaltung von Navigationen, wie sie stattfinden.
NavigationActivation Reprsentiert eine krzliche Navigation ber Dokumentengrenzen hinweg. Es enthlt den Navigationstyp sowie die Historieneintrge des aktuellen und des Ziel-Dokuments.
NavigationCurrentEntryChangeEvent Ereignisobjekt fr das currententrychange Ereignis, das ausgelst wird, wenn sich Navigation.currentEntry gendert hat. Es bietet Zugang zum Navigationstyp und zum vorherigen Historieneintrag, von dem die Navigation ausging.
NavigationDestination Reprsentiert das Ziel, zu dem in der aktuellen Navigation navigiert wird.
NavigationHistoryEntry Reprsentiert einen einzelnen Navigationseintrag der Historie.
NavigationPrecommitController Definiert das Umleitungsverhalten fr einen Prcommit-Handler bei einer Navigation, wenn er in den precommitHandler Callback eines NavigateEvent.intercept() Methodeaufrufs bergeben wird.
NavigationTransition Reprsentiert eine laufende Navigation.
Window.navigation Schreibgeschtzt Gibt das mit dem aktuellen window verbundene Navigation Objekt zurck. Dies ist der Einstiegspunkt fr die Navigation API.
Hinweis: Schauen Sie sich das Live-Demo der Navigation API (Quellcode der Demo ansehen) an.
intercept()navigation.addEventListener("navigate", (event) => {
// We can't intercept some navigations, e.g. cross-origin navigations.
// Return early and let the browser handle them normally.
if (!event.canIntercept) {
return;
}
// We shouldn't intercept fragment navigations or downloads.
if (event.hashChange || event.downloadRequest !== null) {
return;
}
const url = new URL(event.destination.url);
if (url.pathname.startsWith("/articles/")) {
event.intercept({
async handler() {
// The URL has already changed, so show a placeholder while
// fetching the new content, such as a spinner or loading page
renderArticlePagePlaceholder();
// Fetch the new content and display when ready
const articleContent = await getArticleContent(url.pathname);
renderArticlePage(articleContent);
},
});
}
});
scroll()In diesem Beispiel des Abfangens einer Navigation beginnt die handler() Funktion damit, einige Artikelinhalte abzurufen und darzustellen, um dann danach einige Sekundrinhalte abzurufen und darzustellen. Es macht Sinn, die Seite zu den Hauptartikelinhalten zu scrollen, sobald diese verfgbar sind, damit der Benutzer mit ihnen interagieren kann, statt darauf zu warten, dass auch die Sekundrinhalte gerendert werden. Um dies zu erreichen, haben wir einen scroll() Aufruf zwischen den beiden hinzugefgt.
navigation.addEventListener("navigate", (event) => {
// Return early if we can't/shouldn't intercept
if (
!event.canIntercept ||
event.hashChange ||
event.downloadRequest !== null
) {
return;
}
const url = new URL(event.destination.url);
if (url.pathname.startsWith("/articles/")) {
event.intercept({
async handler() {
const articleContent = await getArticleContent(url.pathname);
renderArticlePage(articleContent);
event.scroll();
const secondaryContent = await getSecondaryContent(url.pathname);
addSecondaryContent(secondaryContent);
},
});
}
});
// On JS startup, get the key of the first loaded page
// so the user can always go back there.
const { key } = navigation.currentEntry;
backToHomeButton.onclick = () => navigation.traverseTo(key);
// Navigate away, but the button will always work.
await navigation.navigate("/another_url").finished;
navigation.navigate(url, { state: newState });
Oder
navigation.reload({ state: newState });
Oder falls der Status unabhngig von einer Navigation oder einem Neuladen ist:
navigation.updateCurrentEntry({ state: newState });
| Spezifikation |
|---|
| HTML # navigation-api |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |