Start · Sprachen · JavaScript · Referenz · PerformanceNavigation.toJSON()

PerformanceNavigation.toJSON()

Methode

Gibt ein einfaches Objekt mit den Eigenschaften <code>type</code> und <code>redirectCount</code> des <code>PerformanceNavigation</code>-Objekts zurück, das sich mit JSON serialisieren lässt.

seit JavaScript Veraltet (Navigation Timing Level 1) – in allen gä deprecated seit ja Kategorie: webapi

Signatur

PerformanceNavigation.prototype.toJSON()

Beschreibung

Die Methode toJSON() der veralteten Schnittstelle PerformanceNavigation ist ein Serialisierer: Sie liefert ein einfaches JavaScript-Objekt, das die Werte der Eigenschaften type und redirectCount enthält. Das Objekt, auf das über performance.navigation zugegriffen wird, ist ein Host-Objekt, dessen Eigenschaften als Getter am Prototyp liegen. Ohne toJSON() würde JSON.stringify(performance.navigation) deshalb nur {} ergeben.

JSON.stringify() ruft toJSON() automatisch auf. Man braucht die Methode also vor allem dann, wenn Navigationsdaten an einen Analyse-Endpunkt geschickt, protokolliert oder in localStorage gespeichert werden sollen.

Der Wert von type ist eine Zahl: 0 (TYPE_NAVIGATE, normale Navigation), 1 (TYPE_RELOAD, Neuladen), 2 (TYPE_BACK_FORWARD, Vor/Zurück im Verlauf) oder 255 (TYPE_RESERVED, sonstige Fälle).

Für neuen Code solltest du stattdessen PerformanceNavigationTiming verwenden (über performance.getEntriesByType("navigation")). Diese Schnittstelle bietet ebenfalls toJSON(), liefert aber deutlich mehr Daten und gibt den Navigationstyp als lesbaren Text an.

Rückgabewert

Typ
Object
Beschreibung
Ein einfaches Objekt der Form { type: number, redirectCount: number }, das die Eigenschaften des PerformanceNavigation-Objekts abbildet.

Beispiele

Navigationsdaten als Objekt auslesen

// Direkter Aufruf von toJSON()
const navData = performance.navigation.toJSON();
console.log(navData);
{ type: 0, redirectCount: 0 }

Serialisierung mit JSON.stringify

// JSON.stringify ruft toJSON() automatisch auf
const json = JSON.stringify(performance.navigation);
console.log(json);

// Zum Vergleich: ohne toJSON() wäre das Ergebnis leer,
// weil die Eigenschaften Getter am Prototyp sind
console.log(Object.keys(performance.navigation));
{"type":1,"redirectCount":0} []

Navigationstyp an einen Analyse-Endpunkt senden – mit Fallback auf die moderne API

const typeNames = { 0: 'navigate', 1: 'reload', 2: 'back_forward', 255: 'reserved' };

const getNavigationInfo = () => {
  const [entry] = performance.getEntriesByType('navigation');
  if (entry) {
    // Moderne API: PerformanceNavigationTiming
    const { type, redirectCount } = entry.toJSON();
    return { type, redirectCount };
  }
  // Fallback: veraltete PerformanceNavigation
  const { type, redirectCount } = performance.navigation.toJSON();
  return { type: typeNames[type] ?? 'unknown', redirectCount };
};

const payload = JSON.stringify(getNavigationInfo());
navigator.sendBeacon('/analytics/navigation', payload);
console.log(payload);
{"type":"reload","redirectCount":0}

// Wichtig · Fallstricke

  • Veraltet: PerformanceNavigation und performance.navigation gehören zur Spezifikation Navigation Timing Level 1 und gelten als überholt. Chrome, Firefox und Safari unterstützen sie aus Kompatibilitätsgründen noch, sie können aber künftig entfernt werden. Nutze stattdessen PerformanceNavigationTiming.
  • type ist hier eine Zahl (0, 1, 2, 255). In PerformanceNavigationTiming ist es dagegen ein Text ("navigate", "reload", "back_forward", "prerender"). Achte beim Umstieg auf diesen Unterschied.
  • redirectCount zählt nur Weiterleitungen innerhalb desselben Ursprungs. Bei ursprungsübergreifenden Weiterleitungen ist der Wert 0.
  • Das zurückgegebene Objekt ist eine Momentaufnahme ohne Prototyp-Getter. Es übernimmt die Konstanten wie TYPE_RELOAD nicht.
  • In Web Workern gibt es performance.navigation nicht.