Start · Sprachen · JavaScript · Referenz · Navigator.appVersion

Navigator.appVersion

Eigenschaft

Schreibgeschützte Eigenschaft, die einen String mit Versionsinformationen über den Browser liefert, meist den User-Agent-String ohne das Präfix <code>Mozilla/</code>.

seit JavaScript Baseline: alle Browser (veraltet, nur aus Kompatib Kategorie: webapi

Signatur

Navigator.appVersion

Beschreibung

navigator.appVersion gibt einen String zurück, der die Version des Browsers beschreiben soll. In der Praxis enthält er in allen modernen Browsern fast den kompletten User-Agent-String, nur ohne das führende Mozilla/, also etwa "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36". Firefox ist die Ausnahme und liefert nur eine gekürzte Form wie "5.0 (Windows)".

Die Eigenschaft stammt aus der Zeit der Browserkriege und steht in der HTML-Spezifikation unter den NavigatorID-Eigenschaften, die Browser nur aus Kompatibilitätsgründen mitliefern. Die führende Zahl ist fast immer "5.0" und sagt deshalb nichts über die echte Browserversion aus.

Für neuen Code sollte man appVersion nicht verwenden. Man prüft besser direkt, ob eine Funktion vorhanden ist (Feature Detection, z. B. 'serviceWorker' in navigator). Wo man die Browserversion wirklich braucht, etwa für Statistiken, ist navigator.userAgentData (User-Agent Client Hints) die bessere Wahl, sofern der Browser es unterstützt.

Rückgabewert

Typ
string
Beschreibung
Ein String mit Versions- und Plattforminformationen, meist der User-Agent-String ohne das Präfix Mozilla/. Die Eigenschaft ist schreibgeschützt.

Beispiele

Wert auslesen und mit userAgent vergleichen

const version = navigator.appVersion;
console.log(version);

// In Chromium-Browsern entspricht appVersion dem userAgent ohne "Mozilla/"
console.log(navigator.userAgent === `Mozilla/${version}`);
5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 true

Warum die führende Versionsnummer nichts aussagt

const major = parseFloat(navigator.appVersion);
console.log(major); // in praktisch allen Browsern 5

// Falsch: so lässt sich kein alter Browser erkennen
if (major < 5) {
  console.log('Alter Browser');
} else {
  console.log('Keine brauchbare Aussage möglich');
}
5 Keine brauchbare Aussage möglich

Besser: Funktionsprüfung statt Versionsprüfung

// Statt appVersion auszuwerten, direkt prüfen, ob die Funktion vorhanden ist
const canShare = typeof navigator.share === 'function';
const hasClipboard = 'clipboard' in navigator;

console.log({ canShare, hasClipboard });
{ canShare: true, hasClipboard: true }

Browserversion über User-Agent Client Hints (mit Rückfallwert)

const getBrowserInfo = async () => {
  if (navigator.userAgentData) {
    const { fullVersionList } = await navigator.userAgentData
      .getHighEntropyValues(['fullVersionList']);
    return fullVersionList;
  }
  // Rückfall für Firefox/Safari: nur grobe Angabe
  return navigator.appVersion;
};

getBrowserInfo().then(console.log);
[{ brand: 'Chromium', version: '124.0.6367.60' }, ...]

// Wichtig · Fallstricke

  • Veraltet: Die Eigenschaft wird nur aus Kompatibilitätsgründen mitgeliefert. Man sollte sich nicht darauf verlassen, dass sie in Zukunft verfügbar bleibt oder aussagekräftige Werte liefert.
  • Unzuverlässig: Der Wert beginnt fast immer mit "5.0". Firefox liefert nur eine gekürzte Form wie "5.0 (X11)". Nutzer und Erweiterungen können den Wert fälschen, und Chromium kürzt den User-Agent-String schrittweise (User-Agent Reduction), sodass Betriebssystemversionen eingefroren sind.
  • Datenschutz: In Firefox mit aktiviertem privacy.resistFingerprinting wird ein vereinheitlichter Wert zurückgegeben. Werte aus navigator tragen zum Browser-Fingerprinting bei.
  • Auch in Web Workern über WorkerNavigator.appVersion verfügbar.
  • Eine Zuweisung wie navigator.appVersion = "x" wird ohne Fehler ignoriert (im Strict Mode hat sie ebenfalls keine Wirkung, weil nur ein Getter definiert ist).