Start · Sprachen · JavaScript · Referenz · NavigationHistoryEntry.url

NavigationHistoryEntry.url

Eigenschaft

Gibt die absolute URL eines Verlaufseintrags der Navigation API als String zurück, oder <code>null</code>, wenn die URL aus Datenschutzgründen verborgen bleibt.

seit JavaScript Chrome/Edge 102+; Firefox und Safari erst in sehr Kategorie: webapi

Signatur

get NavigationHistoryEntry.url

Beschreibung

Die schreibgeschützte Eigenschaft url eines NavigationHistoryEntry-Objekts enthält die vollständige, absolute URL des Verlaufseintrags, also mit Protokoll, Host, Pfad, Query-String und Fragment, z. B. "https://example.com/produkte?seite=2#details". Die Einträge bekommst du über navigation.currentEntry, navigation.entries() oder über Navigationsereignisse wie currententrychange.

Gebraucht wird die Eigenschaft vor allem in Single-Page-Anwendungen: Du kannst den Verlauf der aktuellen Sitzung auswerten, z. B. für Breadcrumbs, einen eigenen „Zurück zu …“-Button oder für Analysezwecke. Außerdem lässt sich damit prüfen, ob ein bestimmter Eintrag schon im Verlauf liegt, bevor man mit navigation.traverseTo(entry.key) dorthin springt, statt eine neue Navigation zu starten.

Anders als bei der alten History-API kommst du hier auch an die URLs anderer Einträge. Das gilt aber nur für Einträge derselben Origin im aktuellen Frame. Einträge anderer Origins liefert navigation.entries() gar nicht erst.

Rückgabewert

Typ
string | null
Beschreibung
Die absolute URL des Eintrags als String. Der Wert ist null, wenn der Eintrag zu einem anderen Dokument gehört und dieses Dokument mit einer Referrer-Policy wie no-referrer oder origin ausgeliefert wurde. In diesem Fall wird die URL aus Datenschutzgründen nicht offengelegt.

Beispiele

URL des aktuellen Eintrags auslesen

// Vorher prüfen, ob der Browser die Navigation API kennt
if ('navigation' in window) {
  const url = navigation.currentEntry.url;
  console.log(url);

  // Mit dem URL-Konstruktor in Bestandteile zerlegen
  const { pathname, searchParams } = new URL(url);
  console.log(pathname, searchParams.get('seite'));
} else {
  console.log('Navigation API nicht verfügbar:', location.href);
}
https://example.com/produkte?seite=2 /produkte 2

Verlauf der Sitzung als Breadcrumb-Liste ausgeben

const renderBreadcrumbs = () => {
  const liste = document.querySelector('#verlauf');
  liste.replaceChildren();

  for (const entry of navigation.entries()) {
    const li = document.createElement('li');
    // url kann null sein, dafür einen Ersatztext verwenden
    li.textContent = entry.url ? new URL(entry.url).pathname : '(verborgen)';
    if (entry.key === navigation.currentEntry.key) li.classList.add('aktiv');
    li.addEventListener('click', () => navigation.traverseTo(entry.key));
    liste.append(li);
  }
};

renderBreadcrumbs();
navigation.addEventListener('currententrychange', renderBreadcrumbs);

Zu einem vorhandenen Eintrag zurückspringen statt neu navigieren

const geheZu = async (zielPfad) => {
  const ziel = new URL(zielPfad, location.href).href;
  // Eintrag mit passender URL suchen (neueste zuerst)
  const vorhanden = navigation.entries()
    .toReversed()
    .find((entry) => entry.url === ziel);

  if (vorhanden) {
    await navigation.traverseTo(vorhanden.key).finished;
  } else {
    await navigation.navigate(ziel).finished;
  }
  console.log('Jetzt bei:', navigation.currentEntry.url);
};

geheZu('/warenkorb');
Jetzt bei: https://example.com/warenkorb

// Wichtig · Fallstricke

  • Browserunterstützung: Die Navigation API gibt es in Chromium-Browsern (Chrome, Edge, Opera) seit Version 102. Firefox und Safari unterstützen sie erst in sehr neuen Versionen. Prüfe deshalb vorher mit 'navigation' in window und greife bei Bedarf auf location.href bzw. die History-API zurück.
  • null abfangen: Bei Einträgen anderer Dokumente mit strenger Referrer-Policy ist url gleich null. new URL(entry.url) wirft in diesem Fall einen TypeError.
  • Vergleiche immer mit absoluten URLs: url ist immer absolut. Wandle relative Pfade vor einem Vergleich mit new URL(pfad, location.href).href um. Achte auch auf Unterschiede bei Fragment, abschließendem Schrägstrich und Reihenfolge der Query-Parameter.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung hat keine Wirkung. Um die URL zu ändern, nimm navigation.navigate(url, { history: 'replace' }).
  • Die URL eines Eintrags kann sensible Daten enthalten, etwa Tokens im Query-String. Gib sie nicht ungefiltert an Analyse-Dienste weiter.