Signatur
Beschreibung
NavigationCurrentEntryChangeEvent gehört zur Navigation API. Ein Objekt dieses Typs wird an Listener des Ereignisses currententrychange auf dem globalen navigation-Objekt übergeben. Das Ereignis wird ausgelöst, sobald sich navigation.currentEntry geändert hat. Das passiert bei einer Navigation innerhalb desselben Dokuments (z. B. über navigation.navigate(), history.pushState() oder Vor/Zurück), aber auch bei navigation.updateCurrentEntry().
Das Interface erbt von Event und bringt zwei eigene, schreibgeschützte Eigenschaften mit:
from: derNavigationHistoryEntry, der vor der Änderung aktuell war.navigationType: die Art der Navigation, die zur Änderung geführt hat, also"push","replace","reload"oder"traverse". BeiupdateCurrentEntry()ist der Wertnull.
Das Ereignis eignet sich gut für Aufgaben, die nach einem Wechsel des Eintrags laufen sollen: Analytics-Seitenaufrufe, das Speichern der Scroll-Position oder eines UI-Zustands für den alten Eintrag, oder das Aktualisieren von Breadcrumbs. Um Navigationen abzufangen oder umzulenken, ist dagegen das navigate-Ereignis mit NavigateEvent.intercept() gedacht. currententrychange lässt sich nicht abbrechen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Nur beim Konstruktor new NavigationCurrentEntryChangeEvent(type, options): der Ereignisname, üblicherweise "currententrychange". |
|
| $options Pflicht | object | Initialisierungsobjekt. Es erbt die Felder von EventInit (bubbles, cancelable, composed). |
|
| $options.from Pflicht | NavigationHistoryEntry | Der Eintrag, von dem aus navigiert wurde. Wird zur Eigenschaft from. |
|
| $options.navigationType | "push"|"replace"|"reload"|"traverse"|null | null | Die Art der Navigation. Wird zur Eigenschaft navigationType. |
Rückgabewert
Beispiele
Seitenwechsel protokollieren mit addEventListener
if ('navigation' in window) {
navigation.addEventListener('currententrychange', (event) => {
const von = event.from.url;
const nach = navigation.currentEntry.url;
console.log(`Typ: ${event.navigationType}, von ${von} nach ${nach}`);
});
// Navigation im selben Dokument auslösen
history.pushState({}, '', '/produkte');
}
Zustand des alten Eintrags sichern (on-Property)
// Scroll-Position des verlassenen Eintrags merken
const scrollPositionen = new Map();
navigation.oncurrententrychange = (event) => {
if (event.navigationType === null) return; // nur updateCurrentEntry()
scrollPositionen.set(event.from.key, window.scrollY);
console.log('Gespeichert für', event.from.key);
};
Listener wieder entfernen
const beiWechsel = (event) => {
console.log('Einmaliger Wechsel:', event.navigationType);
navigation.removeEventListener('currententrychange', beiWechsel);
};
navigation.addEventListener('currententrychange', beiWechsel);
navigation.navigate('#details');
Ereignis manuell erzeugen (z. B. für Tests)
const ev = new NavigationCurrentEntryChangeEvent('currententrychange', {
from: navigation.currentEntry,
navigationType: 'replace'
});
console.log(ev.type, ev.navigationType, ev.from === navigation.currentEntry);
// Wichtig · Fallstricke
- Browser-Unterstützung: Die Navigation API gibt es seit Chromium 102. Firefox und Safari haben sie erst in neueren Versionen eingeführt. Prüfen Sie die Unterstützung mit
'navigation' in windowund behalten Sie für ältere Browser einen Fallback überpopstateoder die History API bei. - Das Ereignis wird erst nach dem Wechsel ausgelöst. Beim Aufruf enthält
navigation.currentEntryschon den neuen Eintrag, undevent.fromverweist auf den alten. navigationTypeistnull, wenn nurnavigation.updateCurrentEntry()den Zustand geändert hat. Prüfen Sie das, bevor Sie etwa einen Seitenaufruf zählen.- Das Ereignis lässt sich nicht abbrechen. Ein
preventDefault()hat keine Wirkung. Zum Abfangen oder Blockieren einer Navigation verwenden Sie dasnavigate-Ereignis. - Bei einem vollständigen Dokumentwechsel (neue Seite wird geladen) wird das Ereignis im alten Dokument nicht ausgelöst. Es gilt nur für Navigationen innerhalb desselben Dokuments.
- Wenn die Navigation zu einem Eintrag eines anderen Ursprungs führt, liefert
event.from.urlunter Umständennull, etwa beinoreferrer-Szenarien. Programmieren Sie entsprechend defensiv.