Start · Sprachen · JavaScript · Referenz · WorkerNavigator.product

WorkerNavigator.product

Eigenschaft

Schreibgeschützte Eigenschaft, die in Web Workern in jedem Browser immer den String <code>"Gecko"</code> liefert – ein Relikt aus Kompatibilitätsgründen.

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

Signatur

WorkerNavigator.product

Beschreibung

WorkerNavigator.product ist eine schreibgeschützte Eigenschaft des navigator-Objekts in Worker-Kontexten (Dedicated Worker, Shared Worker, Service Worker). Sie gehört zum Mixin NavigatorID und gibt laut HTML-Spezifikation immer den String "Gecko" zurück – egal ob der Code in Chrome, Safari, Edge oder Firefox läuft.

Ursprünglich sollte die Eigenschaft den Namen der Rendering-Engine angeben. Weil alte Skripte ihn aber zur Browser-Erkennung missbraucht haben, haben alle Hersteller den Wert auf "Gecko" festgelegt. Deshalb enthält product heute keine nützliche Information mehr.

Die Eigenschaft gibt es nur noch, damit alte Skripte weiter funktionieren. In neuem Code solltest du sie nicht verwenden. Prüfe stattdessen, ob eine Funktion vorhanden ist (Feature Detection, z. B. 'fetch' in self). Wenn du wirklich Angaben zu Browser oder Plattform brauchst, nimm navigator.userAgentData (User-Agent Client Hints), wo es unterstützt wird.

Rückgabewert

Typ
string
Beschreibung
Immer der String "Gecko".

Beispiele

Wert direkt im Worker auslesen

// worker.js
console.log(self.navigator.product);
console.log(navigator.product === 'Gecko');
Gecko true

Inline-Worker per Blob: Wert an den Hauptthread melden

const quellcode = `
  self.postMessage({ product: navigator.product });
`;
const url = URL.createObjectURL(new Blob([quellcode], { type: 'text/javascript' }));
const worker = new Worker(url);

worker.addEventListener('message', ({ data }) => {
  console.log('Worker meldet product =', data.product);
  worker.terminate();
  URL.revokeObjectURL(url);
});
Worker meldet product = Gecko

Besser: Feature Detection statt product

// worker.js – NICHT: if (navigator.product === 'Gecko') { ... }
const kannFetch = typeof self.fetch === 'function';
const kannIndexedDB = 'indexedDB' in self;

self.postMessage({ kannFetch, kannIndexedDB });
{ kannFetch: true, kannIndexedDB: true }

// Wichtig · Fallstricke

  • Kein Nutzen zur Browser-Erkennung: Der Wert ist in Chrome, Safari, Edge und Firefox gleich ("Gecko"). Wenn du darauf verzweigst, unterscheidest du also gar nichts.
  • Veraltet: Die Eigenschaft steht nur aus Kompatibilitätsgründen in der Spezifikation. Sie ist schreibgeschützt; wenn du etwas zuweist, wird das stillschweigend ignoriert (im Strict Mode kann ein TypeError auftreten).
  • Im Gegensatz zum Hauptthread gibt es in Workern kein navigator.productSub. Diese Eigenschaft existiert nur in Navigator, nicht in WorkerNavigator.
  • Kompatibilität: Wird von allen modernen Browsern in Dedicated, Shared und Service Workern unterstützt.