Signatur
Beschreibung
Die schreibgeschützte Eigenschaft navigation.activation beschreibt, wie das aktuelle Dokument erreicht wurde. Sie liefert ein NavigationActivation-Objekt mit drei Eigenschaften:
entry: derNavigationHistoryEntry, der beim Aktivieren des Dokuments der aktuelle Eintrag war.from: derNavigationHistoryEntrydes vorherigen Dokuments odernull, wenn dieses nicht same-origin war bzw. es das erste Dokument im Tab ist.navigationType: die Art der Navigation, also"push","replace","reload"oder"traverse".
Man braucht sie vor allem bei dokumentübergreifenden View Transitions. Im Handler von pagereveal lässt sich damit prüfen, von welcher Seite der Nutzer kam und ob er vor- oder zurückgeblättert hat. Danach wählt man die passende Animation aus, zum Beispiel eine Slide-Richtung. Auch Analysen wie „Neu geladen oder über den Verlauf zurück?“ lassen sich damit beantworten, ohne auf die veraltete Schnittstelle performance.navigation zurückzugreifen.
Wichtig: Der Wert bezieht sich nur auf die Navigation, mit der das Dokument geladen wurde. Navigationen innerhalb desselben Dokuments (z. B. über history.pushState() oder navigation.navigate() mit Abfangen durch intercept()) ändern activation nicht. Den aktuellen Eintrag liefert dafür navigation.currentEntry.
Rückgabewert
NavigationActivation-Objekt mit entry, from und navigationType. null, wenn es sich um das anfängliche about:blank-Dokument handelt.Beispiele
Art der Aktivierung auslesen
// Mit Feature-Erkennung, da nicht alle Browser die Navigation API kennen
if ('navigation' in window && navigation.activation) {
const { navigationType, from, entry } = navigation.activation;
console.log('Navigationstyp:', navigationType);
console.log('Vorherige URL:', from?.url ?? '(unbekannt / cross-origin)');
console.log('Aktuelle URL:', entry.url);
}
Richtung für dokumentübergreifende View Transitions festlegen
// Im <head> einbinden, damit der Listener vor dem ersten Rendern aktiv ist
window.addEventListener('pagereveal', (event) => {
if (!event.viewTransition || !navigation.activation) return;
const { navigationType, from, entry } = navigation.activation;
let direction = 'forward';
// Beim Zurückblättern die Animation umkehren
if (navigationType === 'traverse' && from && from.index > entry.index) {
direction = 'backward';
}
event.viewTransition.types.add(direction);
// In CSS: html:active-view-transition-type(backward) { ... }
});
Neuladen erkennen und Zustand wiederherstellen
const restoreDraft = () => {
const draft = sessionStorage.getItem('formular-entwurf');
if (draft) document.querySelector('#nachricht').value = draft;
};
if (navigation.activation?.navigationType === 'reload') {
console.log('Seite wurde neu geladen – Entwurf wird wiederhergestellt');
restoreDraft();
}
// Wichtig · Fallstricke
- Browser-Unterstützung: Verfügbar ab Chromium 123. In Firefox und Safari ist die Navigation API erst in neueren Versionen oder noch gar nicht vorhanden. Deshalb immer mit
'navigation' in windowund optionaler Verkettung (?.) absichern. fromistnull, wenn die vorherige Seite von einem anderen Ursprung kam oder das Dokument das erste im Tab ist. Nie ohne Prüfung darauf zugreifen.- Navigationen innerhalb desselben Dokuments ändern den Wert nicht. Für Single-Page-Apps sind
navigation.currentEntryund das Ereignisnavigatedie richtige Wahl. - Wird die Seite aus dem Back/Forward-Cache wiederhergestellt, wird
activationaktualisiert. Den Wert also besser inpagerevealauslesen als nur einmal beim ersten Laden. - Das Gegenstück auf der verlassenen Seite ist
PageSwapEvent.activationim Ereignispageswap.