Signatur
Beschreibung
Über window.navigator (kurz: navigator) kommt man an das Navigator-Objekt. Das ist der zentrale Einstieg zu Informationen über den Browser und zu vielen modernen Web-APIs. Dazu gehören Eigenschaften wie language, languages, onLine, hardwareConcurrency und cookieEnabled. Außerdem gibt es Unterobjekte bzw. Methoden wie clipboard, geolocation, serviceWorker, mediaDevices, permissions, storage, share() und sendBeacon().
Typische Einsatzfälle:
- Prüfen, ob eine Funktion vorhanden ist (Feature Detection), z. B.
'serviceWorker' in navigator - Die bevorzugte Sprache des Nutzers ermitteln, um Texte passend anzuzeigen
- Den Netzwerkstatus abfragen
- Browser-Funktionen wie die Zwischenablage oder das native Teilen-Menü nutzen
Die Eigenschaft selbst ist schreibgeschützt: Man kann ihr kein anderes Objekt zuweisen. In Web Workern gibt es statt dessen self.navigator. Dort steckt ein WorkerNavigator mit weniger Funktionen. Seit Node.js 21 gibt es auch ein globales navigator mit einigen wenigen Eigenschaften wie hardwareConcurrency, language und userAgent.
Rückgabewert
Navigator-Objekt des aktuellen Browsing-Kontexts. Es ist immer dasselbe Objekt, d. h. window.navigator === navigator.Beispiele
Bevorzugte Sprache des Nutzers ermitteln
const unterstuetzt = ['de', 'en', 'fr'];
// navigator.languages ist nach Priorität sortiert
const sprache = (navigator.languages ?? [navigator.language])
.map((tag) => tag.split('-')[0])
.find((code) => unterstuetzt.includes(code)) ?? 'en';
document.documentElement.lang = sprache;
console.log(`UI-Sprache: ${sprache}`);
Feature Detection: Service Worker registrieren
if ('serviceWorker' in navigator) {
try {
const reg = await navigator.serviceWorker.register('/sw.js');
console.log('Service Worker aktiv, Scope:', reg.scope);
} catch (err) {
console.error('Registrierung fehlgeschlagen:', err);
}
} else {
console.log('Service Worker werden nicht unterstützt.');
}
Online-Status und Kopieren in die Zwischenablage
const status = () => console.log(navigator.onLine ? 'Online' : 'Offline');
status();
window.addEventListener('online', status);
window.addEventListener('offline', status);
const kopieren = async (text) => {
// Nur in sicheren Kontexten (HTTPS) und nach Nutzerinteraktion
if (!navigator.clipboard) return false;
await navigator.clipboard.writeText(text);
return true;
};
document.querySelector('#copy')?.addEventListener('click', async () => {
console.log('Kopiert:', await kopieren('Hallo Welt'));
});
Daten beim Verlassen der Seite zuverlässig senden
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'hidden') {
const daten = JSON.stringify({ event: 'seite_verlassen', zeit: Date.now() });
// sendBeacon wird auch dann noch zugestellt, wenn die Seite geschlossen wird
navigator.sendBeacon('/analytics', daten);
}
});
// Wichtig · Fallstricke
- Kein Browser-Sniffing mit
userAgent: Die Zeichenkette innavigator.userAgentlässt sich fälschen, ist unzuverlässig und wird von den Browsern zunehmend gekürzt (User-Agent Reduction). Besser prüft man direkt, ob eine Funktion vorhanden ist ('share' in navigator). Wo verfügbar (Chromium), liefertnavigator.userAgentDatastrukturierte Daten. onLineist ungenau:trueheißt nur, dass eine Netzwerkverbindung besteht, nicht dass das Internet wirklich erreichbar ist.- Sichere Kontexte: Viele Unterobjekte wie
clipboard,serviceWorker,mediaDevices,geolocationundshare()gibt es nur über HTTPS bzw.localhost. Oft brauchen sie außerdem eine Nutzerinteraktion oder eine Berechtigung. - Datenschutz: Viele Eigenschaften (z. B.
hardwareConcurrency,deviceMemory,languages) eignen sich zum Fingerprinting, also zum Wiedererkennen von Nutzern. Browser mit Tracking-Schutz können deshalb vereinfachte Werte liefern. - Veraltete Eigenschaften:
appName,appVersion,platform,productundvendorgibt es nur noch aus Kompatibilitätsgründen. Man sollte sich nicht auf sie verlassen. - Kompatibilität:
window.navigatorselbst wird von allen Browsern unterstützt. Die einzelnen Unter-APIs werden aber sehr unterschiedlich unterstützt. Auf Node.js istnavigatorerst ab Version 21 global verfügbar.