Signatur
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
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}`);
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');
}
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 });
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);
// 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.resistFingerprintingwird ein vereinheitlichter Wert zurückgegeben. Werte ausnavigatortragen zum Browser-Fingerprinting bei. - Auch in Web Workern über
WorkerNavigator.appVersionverfü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).