Start · Sprachen · JavaScript · Referenz · NavigationActivation.entry

NavigationActivation.entry

Eigenschaft

Schreibgeschützte Eigenschaft, die den <code>NavigationHistoryEntry</code> des eingehenden („Ziel“-)Dokuments einer dokumentübergreifenden Navigation liefert.

seit JavaScript Chromium 123+ (Chrome, Edge, Opera); in anderen Br Kategorie: webapi

Signatur

get NavigationActivation.entry

Beschreibung

Die Eigenschaft entry eines NavigationActivation-Objekts enthält den Verlaufseintrag (NavigationHistoryEntry) des Dokuments, zu dem navigiert wird. Der Wert entspricht dem, was navigation.currentEntry in dem Moment ergab, als das neue Dokument aktiviert wurde. Über den Eintrag kommen Sie an url, key, id, index und den gespeicherten Zustand (getState()).

Ein NavigationActivation-Objekt bekommen Sie auf drei Wegen:

  • navigation.activation – beschreibt die letzte dokumentübergreifende Navigation, durch die die aktuelle Seite geladen wurde.
  • PageRevealEvent.activation im Ereignis pagereveal – wird ausgelöst, wenn das neue Dokument zum ersten Mal angezeigt wird.
  • PageSwapEvent.activation im Ereignis pageswap – wird ausgelöst, kurz bevor das alte Dokument entladen wird. Hier zeigt entry auf das Ziel der Navigation.

Am häufigsten wird entry zusammen mit from und navigationType verwendet, zum Beispiel um bei dokumentübergreifenden View Transitions je nach Quell- und Ziel-URL eine passende Animation auszuwählen oder um Analysedaten über Navigationswege zu sammeln.

Rückgabewert

Typ
NavigationHistoryEntry
Beschreibung
Der Verlaufseintrag des eingehenden Dokuments, zum Beispiel mit url, key, index und getState().

Beispiele

Ziel-URL der aktuellen Seitenaktivierung lesen

// Prüfen, ob die Navigation-API und activation verfügbar sind
if ('navigation' in window && navigation.activation) {
  const { entry, from, navigationType } = navigation.activation;
  console.log('Ziel:', new URL(entry.url).pathname);
  console.log('Herkunft:', from ? new URL(from.url).pathname : '(keine gleiche Herkunft)');
  console.log('Typ:', navigationType);
}
Ziel: /produkte/42 Herkunft: /produkte Typ: push

View Transition je nach Zielseite im pagereveal-Ereignis wählen

window.addEventListener('pagereveal', (event) => {
  if (!event.viewTransition || !event.activation) return;

  const to = new URL(event.activation.entry.url);
  const from = event.activation.from ? new URL(event.activation.from.url) : null;

  // Von der Liste in die Detailansicht: eigene Animation
  if (from?.pathname === '/produkte' && to.pathname.startsWith('/produkte/')) {
    event.viewTransition.types.add('liste-zu-detail');
  } else if (event.activation.navigationType === 'traverse') {
    event.viewTransition.types.add('zurueck');
  }
});

Im pageswap-Ereignis auf das Navigationsziel reagieren

window.addEventListener('pageswap', (event) => {
  if (!event.viewTransition || !event.activation) return;

  // entry ist hier der Eintrag der Seite, die gleich geladen wird
  const zielPfad = new URL(event.activation.entry.url).pathname;

  if (zielPfad.startsWith('/produkte/')) {
    const id = zielPfad.split('/').pop();
    const bild = document.querySelector(`#produkt-${id} img`);
    if (bild) {
      bild.style.viewTransitionName = 'produktbild';
      // Nach dem Erfassen des Snapshots wieder zurücksetzen
      event.viewTransition.finished.then(() => {
        bild.style.viewTransitionName = '';
      });
    }
  }
});

// Wichtig · Fallstricke

  • Browser-Kompatibilität: NavigationActivation gehört zur Navigation-API und wird von Chromium-Browsern ab Version 123 unterstützt (pageswap ab 124). Andere Engines unterstützen die Navigation-API erst in neueren Versionen oder noch gar nicht. Prüfen Sie die Verfügbarkeit daher immer mit einer Feature-Erkennung wie 'navigation' in window && navigation.activation.
  • navigation.activation kann null sein, etwa in Frames, bei Seiten ohne dokumentübergreifende Navigation oder in nicht unterstützten Kontexten. Auch event.activation in pageswap ist null, wenn das Ziel eine andere Herkunft (Origin) hat oder die Navigation über eine Weiterleitung zu einer fremden Herkunft lief.
  • navigation.activation.entry wird bei Navigationen innerhalb desselben Dokuments (z. B. history.pushState() oder abgefangene Navigationen) nicht aktualisiert. Den jeweils aktuellen Eintrag liefert navigation.currentEntry.
  • Bei navigationType === 'reload' zeigen entry und from auf denselben Eintrag. Die Eigenschaft ist schreibgeschützt; Zuweisungen werden stillschweigend ignoriert (im Strict Mode wird ein TypeError ausgelöst).