Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Seit January 2026 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Die intercept()-Methode der NavigateEvent Schnittstelle fängt diese Navigation ab und wandelt sie in eine gleichseitige Navigation zur destination URL um.
Ein Optionsobjekt, das die folgenden Eigenschaften enthält:
handler OptionalEine Callback-Funktion, die das Verhalten der Navigation festlegt; sie gibt ein Promise zurück. Diese Funktion wird ausgeführt, nachdem die Eigenschaft currentEntry aktualisiert wurde.
precommitHandler OptionalEine Callback-Funktion, die Verhalten definiert, das unmittelbar vor der Festschreibung der Navigation stattfinden soll; sie akzeptiert ein NavigationPrecommitController-Objekt als Argument und gibt ein Promise zurück. Diese Funktion wird ausgeführt, bevor die Eigenschaft currentEntry aktualisiert wurde.
focusReset OptionalDefiniert das Fokusverhalten der Navigation. Dies kann einen der folgenden Werte annehmen:
after-transitionSobald das Promise Ihrer Handler-Funktion aufgelöst wird, fokussiert der Browser das erste Element mit dem autofocus Attribut oder das <body> Element, wenn kein Element autofocus gesetzt hat. Dies ist der Standardwert.
manualDeaktiviert das Standardverhalten.
scroll OptionalDefiniert das Scrollverhalten der Navigation. Dies kann einen der folgenden Werte annehmen:
after-transitionErlaubt dem Browser, das Scrollen zu handhaben, zum Beispiel durch Scrollen zum relevanten Fragmentbezeichner, wenn die URL ein Fragment enthält, oder Wiederherstellen der Scrollposition an der gleichen Stelle wie beim letzten Mal, wenn die Seite neu geladen wird oder eine Seite in der Historie erneut besucht wird. Dies ist der Standardwert.
manualDeaktiviert das Standardverhalten.
Keiner (undefined).
Wird ausgelöst, wenn das aktuelle Document noch nicht aktiv ist oder wenn die Navigation abgebrochen wurde.
SecurityError DOMExceptionWird ausgelöst, wenn:
Die intercept()-Methode wird verwendet, um gleichseitiges (SPA) Navigationsverhalten zu implementieren, wenn eine Navigation auftritt; zum Beispiel, wenn ein Link angeklickt wird, ein Formular abgeschickt wird oder eine programmatische Navigation initiiert wird (mithilfe von History.pushState(), Window.location, etc.).
Dies geschieht durch ein paar verschiedene Callbacks, handler() und precommitHandler().
Der handler()-Callback wird als Reaktion auf eine bestätigte Navigation ausgeführt. Er läuft, nachdem die currentEntry Eigenschaft aktualisiert wurde, was bedeutet, dass eine neue URL in der Benutzeroberfläche des Browsers angezeigt wird und die Historie mit einem neuen Eintrag aktualisiert wird.
Ein typisches Beispiel sieht so aus und ermöglicht es, speziellen Inhalt zu rendern und zu laden als Reaktion auf eine bestimmte Navigation:
handler() sollte verwendet werden, um Navigationsverhalten zu implementieren, bei dem die Navigation bestätigt wird: der Benutzer sollte etwas Neues sehen.
Es könnte jedoch auch gewünscht sein, eine laufende Navigation zu ändern oder abzubrechen, oder Arbeiten während der Navigation auszuführen, bevor sie bestätigt wird. Dieses Szenario kann mit dem precommitHandler()-Callback behandelt werden, das ausgeführt wird, bevor die currentEntry Eigenschaft aktualisiert und die neue Position in der Browser-Oberfläche angezeigt wird.
Zum Beispiel, wenn der Benutzer zu einer eingeschränkten Seite navigiert und nicht angemeldet ist, möchten Sie möglicherweise den Browser zu einer Anmeldeseite umleiten. Dies kann so behandelt werden:
Dieses Muster ist einfacher als die Alternative, die ursprüngliche Navigation abzubrechen und eine neue zur Umleitungsseite zu starten, da es den Zwischenzustand nicht offenlegt. Zum Beispiel wird nur ein navigatesuccess oder navigateerror Ereignis ausgelöst, und wenn die Navigation durch einen Aufruf von Navigation.navigate() ausgelöst wurde, wird das Promise erst erfüllt, wenn das Umleitungsziel erreicht ist.
Der precommitHandler()-Callback nimmt ein NavigationPrecommitController Objekt als Argument, das eine redirect()-Methode enthält. Die redirect()-Methode nimmt zwei Parameter — einen String, der die URL angibt, zu der umgeleitet werden soll, und optional ein Optionsobjekt, das den Zustand und das Historienverhalten spezifizieren kann.
precommitHandler() behandelt in der Regel alle Änderungen am Navigationsverhalten, die erforderlich sind, bevor die Ziel-URL tatsächlich im Browser angezeigt wird, sie entweder abbrechend oder an einen anderen Ort umleitend.
Hinweis: Da precommitHandler() verwendet werden kann, um Navigationen abzubrechen, funktioniert es nur wie erwartet, wenn die Event.cancelable Eigenschaft des Ereignisses true ist. Ein Aufruf von intercept() mit einem precommitHandler() bei einem nicht abbrechbaren Ereignis führt zu einem SecurityError.
Wie wir oben gesehen haben, können Sie ein handler()-Callback in dem Objekt angeben, das an die intercept()-Methode übergeben wird, um Aktionen auszuführen, nachdem eine Navigation bestätigt wurde. Dieser Ansatz funktioniert gut, wenn die Aktionen, die nach der Bestätigung benötigt werden, nicht von Aktionen abhängen, die in der Vorbereitungsphase ausgeführt wurden. Wenn sie es tun, können Sie NavigationPrecommitController.addHandler() im precommitHandler() verwenden, um einen Handler dynamisch hinzuzufügen, der nach der Bestätigung der Navigation ausgeführt wird.
Betrachten Sie zum Beispiel diesen Code, der das vorherige Beispiel für das Umleiten eines nicht angemeldeten Benutzers zu einer Anmeldeseite erweitert. Der Code verwendet addHandler(), um einen Callback-Handler nach der Bestätigung hinzuzufügen, der eine Nachricht zeigt, die den Grund für die Umleitung erklärt. Beachten Sie, dass der Handler nur für den spezifischen Fall einer Umleitung zur Anmeldeseite ausgeführt wird.
Wenn die von den intercept()-Handler-Funktionen zurückgegebenen Promises erfüllt werden, wird das navigatesuccess-Ereignis des Navigation-Objekts ausgelöst, was Ihnen erlaubt, Aufräumaktionen nach Abschluss einer erfolgreichen Navigation auszuführen. Wenn diese Promises zurückgewiesen werden, was bedeutet, dass die Navigation fehlgeschlagen ist, wird navigateerror stattdessen ausgelöst, was Ihnen erlaubt, den Fehlerfall elegant zu handhaben.
Es gibt auch eine finished-Eigenschaft im Rückgabewert von Navigationsmethoden (wie Navigation.navigate()), die gleichzeitig erfüllt oder zurückgewiesen wird, wenn die oben genannten Ereignisse ausgelöst werden, was einen weiteren Weg zur Handhabung der Erfolgs- und Fehlerfälle bietet.
Beide precommitHandler() und handler()-Callbacks können innerhalb des gleichen intercept()-Aufrufs enthalten sein. In solchen Fällen folgt die Reihenfolge der Operationen wie folgt:
Zuerst läuft der precommitHandler()-Handler.
Wenn die Navigation bestätigt wird, wird ein neuer NavigationHistoryEntry für die Navigation erstellt, und das committed-Promise wird erfüllt.
Als nächstes läuft das handler()-Promise.
Beachten Sie, dass der oben genannte Prozess auch über mehrere intercept()-Aufrufe auf dem gleichen NavigateEvent aufrechterhalten wird, und für handler()-Callbacks, die im precommitHandler() hinzugefügt wurden. Alle precommitHandler()-Callbacks werden zuerst aufgerufen, und wenn alle davon auflösen, wird die Navigation bestätigt, und alle handler()-Callbacks werden aufgerufen.
Standardmäßig wird nach einer mit intercept() behandelten Navigation der Dokumentfokus auf das erste Element im DOM mit einem autofocus Attribut zurückgesetzt oder, falls kein autofocus gesetzt ist, auf das <body> Element. Wenn Sie dieses Verhalten überschreiben möchten, um eine zugänglichere Fokusposition bei der Navigation manuell zu implementieren (zum Beispiel die neue oberste Überschrift), können Sie dies tun, indem Sie die focusReset-Option auf manual setzen.
Nach Abschluss einer intercept()-Navigation tritt folgendes Scrollverhalten ein:
Wenn Sie dieses Verhalten ausschalten möchten, können Sie dies tun, indem Sie die scroll-Option auf manual setzen.
Wenn Sie das oben beschriebene Standard-Scrollverhalten manuell auslösen möchten (vielleicht möchten Sie die Scrollposition frühzeitig auf den Anfang der Seite zurücksetzen, bevor die vollständige Navigation abgeschlossen ist), können Sie dies tun, indem Sie NavigateEvent.scroll() aufrufen.
Die Einreichung von Formularen kann erkannt werden, indem die NavigateEvent.formData Eigenschaft abgefragt wird. Das folgende Beispiel verwandelt jede Formulareinreichung in eine, die auf der aktuellen Seite bleibt. In diesem Fall aktualisieren Sie das DOM nicht, daher können Sie jedes Standard-Reset- und Scrollverhalten mit focusReset und scroll abstellen.
| HTML # dom-navigateevent-intercept-dev |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.