Signatur
Beschreibung
Die Eigenschaft navigator.userAgent gibt die User-Agent-Zeichenkette (UA-String) zurück, die der Browser auch im HTTP-Header User-Agent mitschickt. Sie enthält in der Regel Angaben zu Browser-Engine, Browsername und -version sowie zum Betriebssystem, z. B. Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36.
Typische Einsatzzwecke sind Protokollierung und Analyse (z. B. in Fehlerberichten), das Anzeigen von Diagnoseinformationen oder als letzter Ausweg das Umgehen eines konkreten, bekannten Browserfehlers. Für die eigentliche Programmlogik sollte man dagegen Feature Detection nutzen, also prüfen, ob eine API vorhanden ist ('share' in navigator), statt vom Browsernamen auf Fähigkeiten zu schließen.
Der UA-String ist historisch gewachsen und absichtlich irreführend: Fast jeder Browser beginnt mit Mozilla/5.0, Chrome enthält Safari, Edge enthält Chrome. Zudem reduzieren Chromium-Browser seit 2022/2023 den Informationsgehalt (User-Agent Reduction): Nebenversionen und genaue Betriebssystemversionen werden durch feste Platzhalter ersetzt. Detailliertere Angaben liefert dort die Client-Hints-API navigator.userAgentData.
Die Eigenschaft ist auch in Web Workern über self.navigator.userAgent (WorkerNavigator) verfügbar.
Rückgabewert
Beispiele
User-Agent auslesen und ausgeben
const ua = navigator.userAgent;
console.log(ua);
User-Agent in einem Fehlerbericht mitsenden
window.addEventListener('error', (event) => {
const report = {
message: event.message,
source: event.filename,
line: event.lineno,
userAgent: navigator.userAgent,
url: location.href,
time: new Date().toISOString()
};
// sendBeacon funktioniert auch beim Verlassen der Seite zuverlässig
navigator.sendBeacon('/api/errors', JSON.stringify(report));
});
Grobe Erkennung mobiler Geräte (nur als Fallback)
const isMobile = () => {
// Bevorzugt: Client Hints (Chromium)
if (navigator.userAgentData) {
return navigator.userAgentData.mobile;
}
// Fallback: UA-String auswerten
return /Android|iPhone|iPad|iPod|Mobile/i.test(navigator.userAgent);
};
console.log(isMobile() ? 'Mobiles Gerät' : 'Desktop');
Besser: Feature Detection statt UA-Sniffing
const shareButton = document.querySelector('#share');
// Nicht: if (/Android|iPhone/.test(navigator.userAgent)) ...
if ('share' in navigator) {
shareButton.addEventListener('click', async () => {
try {
await navigator.share({ title: document.title, url: location.href });
} catch (err) {
console.warn('Teilen abgebrochen:', err.name);
}
});
} else {
shareButton.hidden = true;
}
// Wichtig · Fallstricke
- Unzuverlässig: Der UA-String kann vom Nutzer, von Erweiterungen, DevTools-Geräteemulation oder Datenschutz-Browsern beliebig verändert werden. Niemals für Sicherheitsentscheidungen verwenden.
- UA-Sniffing vermeiden: Browserweichen über den UA-String brechen regelmäßig bei neuen Versionen oder unbekannten Browsern. Feature Detection ist robuster.
- User-Agent Reduction: Chrome, Edge und andere Chromium-Browser liefern eingefrorene Werte (z. B.
Chrome/124.0.0.0, unter Windows stetsWindows NT 10.0auch bei Windows 11). Safari meldet auf iPadOS standardmäßig einen macOS-UA. Genaue Daten ggf. übernavigator.userAgentData.getHighEntropyValues()(nur Chromium, nur sichere Kontexte). - Datenschutz: Der UA-String trägt zum Browser-Fingerprinting bei; beim Speichern gelten ggf. DSGVO-Anforderungen.
- Nicht in Protokollen ungefiltert in HTML ausgeben: Da der Wert manipulierbar ist, vor Einfügen per
innerHTMLescapen bzw.textContentnutzen (XSS). - Die Eigenschaft wird von allen Browsern unterstützt; in Node.js (ab Version 21) existiert ebenfalls
navigator.userAgentmit einem Wert wieNode.js/21.