Signatur
Beschreibung
navigator.appCodeName ist eine nur lesbare Eigenschaft des Navigator-Objekts. Sie gibt einen String zurück, der in allen modernen Browsern (Chrome, Firefox, Safari, Edge, Opera) fest auf "Mozilla" steht. Das gilt auch in Web Workern über WorkerNavigator.appCodeName.
Der Wert stammt aus der Anfangszeit des Webs. Damals prüften Websites auf „Mozilla“ (den Codenamen von Netscape Navigator), um zu entscheiden, ob sie erweiterte Funktionen ausliefern. Andere Browser übernahmen den Wert deshalb, damit sie nicht ausgesperrt wurden. Heute enthält die Eigenschaft also keinerlei Information über den tatsächlich verwendeten Browser.
Die HTML-Spezifikation führt appCodeName nur noch zur Abwärtskompatibilität und schreibt den Wert "Mozilla" ausdrücklich vor. In neuem Code solltest du die Eigenschaft nicht verwenden. Frag stattdessen gezielt ab, ob eine Funktion vorhanden ist (Feature Detection), oder nutze bei Bedarf navigator.userAgentData bzw. navigator.userAgent.
Rückgabewert
"Mozilla".Beispiele
Wert auslesen
// Liefert in jedem aktuellen Browser denselben Wert
console.log(navigator.appCodeName);
Warum die Browser-Erkennung damit scheitert
// Anti-Beispiel: Diese Prüfung ist in JEDEM Browser wahr
const istFirefox = navigator.appCodeName === 'Mozilla';
console.log(`Firefox erkannt? ${istFirefox}`); // auch in Chrome/Safari true
// Besser: gezielt die benötigte Funktion prüfen
const kannZwischenablage = 'clipboard' in navigator && typeof navigator.clipboard.writeText === 'function';
console.log(`Zwischenablage-API verfügbar: ${kannZwischenablage}`);
Legacy-Diagnoseobjekt mit modernen Alternativen
const browserInfo = () => ({
appCodeName: navigator.appCodeName, // immer "Mozilla"
appName: navigator.appName, // immer "Netscape"
// aussagekräftigere Quellen:
brands: navigator.userAgentData?.brands?.map(b => `${b.brand} ${b.version}`) ?? [],
userAgent: navigator.userAgent
});
console.table(browserInfo());
Im Web Worker
// worker.js
self.postMessage(self.navigator.appCodeName);
// main.js
const worker = new Worker('worker.js');
worker.onmessage = ({ data }) => console.log(`Worker meldet: ${data}`);
// Wichtig · Fallstricke
- Veraltet: Die Eigenschaft existiert nur zur Abwärtskompatibilität. Ihr Wert ist laut HTML-Spezifikation festgelegt und sagt daher nichts aus. Verwende sie nie zur Browser-Erkennung.
- Kein Ersatz für Feature Detection: Prüfe stattdessen direkt, ob eine Funktion vorhanden ist, z. B. mit
'serviceWorker' in navigatoroder in CSS mit@supports. - Kompatibilität: Wird von allen Browsern und in Web Workern (
WorkerNavigator) unterstützt und ist nur lesbar. Ältere Firefox-Versionen erlaubten, den Wert über die Einstellunggeneral.appname.overridezu überschreiben. Das hat heute keine praktische Bedeutung mehr. - Die verwandten Eigenschaften
navigator.appName(immer"Netscape") undnavigator.product(immer"Gecko") sind ebenfalls fest vorgegeben und genauso wenig aussagekräftig. - Auch
navigator.userAgentist unzuverlässig und kann gefälscht werden. Chromium-Browser kürzen den String zudem zunehmend (User-Agent Reduction).