Signatur
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
{ 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);
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));
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);
// Wichtig · Fallstricke
- Veraltet:
PerformanceNavigationundperformance.navigationgehö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 stattdessenPerformanceNavigationTiming. typeist hier eine Zahl (0,1,2,255). InPerformanceNavigationTimingist es dagegen ein Text ("navigate","reload","back_forward","prerender"). Achte beim Umstieg auf diesen Unterschied.redirectCountzählt nur Weiterleitungen innerhalb desselben Ursprungs. Bei ursprungsübergreifenden Weiterleitungen ist der Wert0.- Das zurückgegebene Objekt ist eine Momentaufnahme ohne Prototyp-Getter. Es übernimmt die Konstanten wie
TYPE_RELOADnicht. - In Web Workern gibt es
performance.navigationnicht.