Start · Sprachen · JavaScript · Referenz · Navigator.userAgent

Navigator.userAgent

Eigenschaft

Die schreibgeschützte Eigenschaft <code>navigator.userAgent</code> liefert die User-Agent-Zeichenkette des aktuellen Browsers.

seit JavaScript Baseline: alle Browser (auch in Web Workern über W Kategorie: webapi

Signatur

get Navigator.userAgent

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

Typ
string
Beschreibung
Die User-Agent-Zeichenkette des Browsers. Schreibgeschützt; Zuweisungen werden ignoriert (im Strict Mode ohne Fehler, da es sich um einen Getter auf dem Prototyp handelt).

Beispiele

User-Agent auslesen und ausgeben

const ua = navigator.userAgent;
console.log(ua);
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36

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');
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 stets Windows NT 10.0 auch bei Windows 11). Safari meldet auf iPadOS standardmäßig einen macOS-UA. Genaue Daten ggf. über navigator.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 innerHTML escapen bzw. textContent nutzen (XSS).
  • Die Eigenschaft wird von allen Browsern unterstützt; in Node.js (ab Version 21) existiert ebenfalls navigator.userAgent mit einem Wert wie Node.js/21.