Start · Sprachen · JavaScript · Referenz · Navigator.appCodeName

Navigator.appCodeName

Eigenschaft

Nur lesbare Eigenschaft, die den internen „Codenamen“ des Browsers liefert – aus Kompatibilitätsgründen in jedem Browser immer <code>"Mozilla"</code>.

seit JavaScript Baseline: alle Browser (veraltet) Kategorie: webapi

Signatur

Navigator.appCodeName

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

Typ
string
Beschreibung
Immer der String "Mozilla".

Beispiele

Wert auslesen

// Liefert in jedem aktuellen Browser denselben Wert
console.log(navigator.appCodeName);
Mozilla

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}`);
Firefox erkannt? true Zwischenablage-API verfügbar: true

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());
Tabelle mit appCodeName: "Mozilla", appName: "Netscape", brands (nur Chromium) und dem vollständigen User-Agent-String

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}`);
Worker meldet: Mozilla

// 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 navigator oder 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 Einstellung general.appname.override zu überschreiben. Das hat heute keine praktische Bedeutung mehr.
  • Die verwandten Eigenschaften navigator.appName (immer "Netscape") und navigator.product (immer "Gecko") sind ebenfalls fest vorgegeben und genauso wenig aussagekräftig.
  • Auch navigator.userAgent ist unzuverlässig und kann gefälscht werden. Chromium-Browser kürzen den String zudem zunehmend (User-Agent Reduction).