Signatur
Beschreibung
WorkerNavigator.appName ist eine nur-lesbare Eigenschaft des navigator-Objekts, das in Web Workern (Dedicated, Shared und Service Worker) über self.navigator zur Verfügung steht. Sie entspricht Navigator.appName im Hauptthread.
Laut HTML-Spezifikation muss der Wert immer "Netscape" sein, egal ob der Code in Chrome, Firefox, Safari oder Edge läuft. Das ist ein Überbleibsel aus der Zeit der Browserkriege: Viele alte Skripte prüften auf "Netscape", deshalb haben sich alle Hersteller auf diesen festen Wert geeinigt.
Praktisch nutzen lässt sich die Eigenschaft deshalb nicht, um Browser zu erkennen. Sie existiert nur, damit alter Code nicht abstürzt. Wer Fähigkeiten prüfen will, sollte stattdessen Feature-Detection verwenden, also nachsehen, ob die gewünschte API existiert (z. B. 'OffscreenCanvas' in self).
Rückgabewert
"Netscape".Beispiele
Wert im Dedicated Worker auslesen
// worker.js
self.postMessage(`appName im Worker: ${navigator.appName}`);
// main.js
const worker = new Worker('worker.js');
worker.addEventListener('message', (event) => {
console.log(event.data);
});
Inline-Worker per Blob – Vergleich mit dem Hauptthread
const code = `self.postMessage(navigator.appName);`;
const blob = new Blob([code], { type: 'text/javascript' });
const url = URL.createObjectURL(blob);
const worker = new Worker(url);
worker.onmessage = ({ data }) => {
console.log('Worker:', data);
console.log('Hauptthread:', navigator.appName);
console.log('Identisch:', data === navigator.appName);
worker.terminate();
URL.revokeObjectURL(url);
};
Besser: Feature-Detection statt appName
// worker.js – NICHT auf navigator.appName verlassen
const capabilities = {
offscreenCanvas: typeof OffscreenCanvas !== 'undefined',
indexedDB: 'indexedDB' in self,
webGPU: 'gpu' in navigator,
cores: navigator.hardwareConcurrency ?? 1
};
self.postMessage(capabilities);
// Wichtig · Fallstricke
- Keine Browser-Erkennung möglich: Der Wert ist per Spezifikation fest auf
"Netscape"gesetzt. Logik wieif (navigator.appName === 'Netscape')gilt daher immer. - Veraltet: Die Eigenschaft wird nur aus Kompatibilitätsgründen mitgeführt und gilt als überholt. Neuer Code sollte sie nicht verwenden.
- Auch
userAgentist unzuverlässig: Der User-Agent-String lässt sich fälschen und wird zunehmend gekürzt (User-Agent Reduction). Für belastbare Angaben gibt esnavigator.userAgentData(User-Agent Client Hints), derzeit nur in Chromium-Browsern. - Kompatibilität: In Dedicated, Shared und Service Workern aller modernen Browser verfügbar. Node.js hat erst ab Version 21 ein globales
navigator, und dort fehltappName.