Start · Sprachen · JavaScript · Referenz · WorkerNavigator.appVersion

WorkerNavigator.appVersion

Eigenschaft

Nur lesbare Eigenschaft, die in einem Worker entweder <code>"4.0"</code> oder einen String mit Versionsinformationen über den Browser liefert.

seit JavaScript Baseline: alle Browser (in Workern) Kategorie: webapi

Signatur

WorkerNavigator.appVersion

Beschreibung

WorkerNavigator.appVersion ist das Gegenstück zu Navigator.appVersion im Worker-Kontext. Innerhalb eines Dedicated, Shared oder Service Workers erreichst du die Eigenschaft über self.navigator.appVersion oder einfach über navigator.appVersion. Der Wert ist nur lesbar und immer ein String.

Der Inhalt hängt vom Browser ab: Firefox gibt aus Datenschutzgründen fest "4.0" zurück. Chromium-Browser und Safari liefern dagegen meist den Teil des User-Agent-Strings nach "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".

Die Eigenschaft stammt noch aus der Frühzeit des Webs und ist für Browsererkennung ungeeignet. Brauchbar ist sie höchstens für Diagnose- oder Logging-Zwecke, etwa wenn ein Worker Fehlerberichte mit Umgebungsdaten anreichert. Für die Entscheidung, ob eine Funktion verfügbar ist, solltest du immer Feature Detection verwenden, zum Beispiel mit 'OffscreenCanvas' in self.

Rückgabewert

Typ
string
Beschreibung
Entweder "4.0" (z. B. in Firefox) oder ein browserabhängiger String mit Versions- und Plattforminformationen, meist der User-Agent ohne das Präfix "Mozilla/".

Beispiele

Wert im Dedicated Worker auslesen und an die Hauptseite senden

// main.js
const worker = new Worker('worker.js');
worker.addEventListener('message', (event) => {
  console.log('Worker meldet appVersion:', event.data);
});

// worker.js
self.postMessage(self.navigator.appVersion);
Worker meldet appVersion: 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36

Umgebungsdaten für Fehlerberichte im Worker sammeln

// worker.js
const getEnvironment = () => ({
  appVersion: navigator.appVersion,
  userAgent: navigator.userAgent,
  language: navigator.language,
  cores: navigator.hardwareConcurrency
});

self.addEventListener('error', (event) => {
  // Nur für Diagnose – nicht für Logik-Entscheidungen verwenden
  fetch('/api/log', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ message: event.message, env: getEnvironment() })
  });
});

Besser: Feature Detection statt Versionsprüfung

// worker.js
// Schlecht: if (navigator.appVersion.includes('Chrome')) { ... }
// Gut: direkt prüfen, ob die benötigte API existiert
const canRenderOffscreen = typeof OffscreenCanvas !== 'undefined';
console.log('appVersion:', navigator.appVersion);
console.log('OffscreenCanvas verfügbar:', canRenderOffscreen);
appVersion: 4.0 OffscreenCanvas verfügbar: true

// Wichtig · Fallstricke

  • Unzuverlässig: Firefox liefert immer "4.0", andere Browser ahmen aus Kompatibilitätsgründen fremde Kennungen nach (z. B. enthält Chrome „Safari“). Der Wert lässt sich außerdem über Einstellungen oder Erweiterungen verändern.
  • Kein Ersatz für Feature Detection: Versionsweichen auf Basis dieses Strings gehen bei neuen Browserversionen schnell kaputt.
  • User-Agent-Reduktion: Chromium kürzt die Versions- und Plattformangaben zunehmend auf feste Werte. Für genauere Daten gibt es in Chromium navigator.userAgentData (User-Agent Client Hints), das auch in Workern verfügbar ist, aber nicht in allen Browsern.
  • Datenschutz: Wird der Wert zusammen mit anderen Merkmalen gespeichert, trägt er zum Fingerprinting bei. Speichere ihn nur, wenn du ihn wirklich brauchst.
  • Kompatibilität: Die Eigenschaft wird in allen aktuellen Browsern in Dedicated, Shared und Service Workern unterstützt. Sie gilt als veraltet, wird aber aus Kompatibilitätsgründen nicht entfernt.