Start · Sprachen · JavaScript · Referenz · WorkerLocation.search

WorkerLocation.search

Eigenschaft

Liefert den Query-String der Worker-Skript-URL als <code>string</code>, inklusive führendem <code>?</code>. Ohne Query-String ist der Wert leer.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

WorkerLocation.search

Beschreibung

WorkerLocation.search ist eine schreibgeschützte Eigenschaft des Objekts self.location innerhalb eines Workers. Sie enthält den Query-Teil der URL, mit der das Worker-Skript geladen wurde, zum Beispiel "?mode=fast&id=42". Ist kein Query-String vorhanden, erhältst du einen leeren String "".

In der Praxis dient die Eigenschaft vor allem dazu, einem Worker schon beim Start Konfigurationswerte mitzugeben. Das geht, ohne vorher eine Nachricht mit postMessage() zu schicken: Der Hauptthread hängt die Parameter an die Skript-URL an (new Worker("worker.js?debug=1")), und der Worker liest sie beim Start über location.search aus. Das funktioniert in dedizierten Workern, Shared Workern und Service Workern.

Am bequemsten verarbeitest du den Wert mit URLSearchParams. Das Objekt entfernt das führende ? selbst und dekodiert Prozent-Kodierungen korrekt.

Rückgabewert

Typ
string
Beschreibung
Der Query-String der Worker-URL mit führendem ?, oder "", wenn kein Query-String vorhanden ist. Der Wert kann Prozent-Kodierungen enthalten.

Beispiele

Query-String im Worker auslesen

// main.js
const worker = new Worker('worker.js?mode=fast&id=42');

// worker.js
console.log(self.location.search);
?mode=fast&id=42

Startkonfiguration mit URLSearchParams auswerten

// main.js
const worker = new Worker('rechner.js?precision=4&debug=true');
worker.onmessage = (e) => console.log('Ergebnis:', e.data);
worker.postMessage(Math.PI);

// rechner.js
const params = new URLSearchParams(location.search);
const precision = Number(params.get('precision') ?? 2);
const debug = params.get('debug') === 'true';

self.onmessage = (e) => {
  if (debug) console.log('Eingabe:', e.data);
  self.postMessage(e.data.toFixed(precision));
};
Eingabe: 3.141592653589793 Ergebnis: 3.1416

Service-Worker-Version über die Registrierungs-URL

// main.js
if ('serviceWorker' in navigator) {
  await navigator.serviceWorker.register('/sw.js?v=2024-05');
}

// sw.js
const version = new URLSearchParams(self.location.search).get('v') ?? 'dev';
const CACHE_NAME = `app-cache-${version}`;

self.addEventListener('install', (event) => {
  event.waitUntil(caches.open(CACHE_NAME));
});
console.log(CACHE_NAME);
app-cache-2024-05

// Wichtig · Fallstricke

  • Nur lesbar: Anders als bei window.location.search bewirkt eine Zuweisung nichts. Eine Navigation gibt es in Workern nicht.
  • Führendes ?: Wenn du den Rohwert selbst zerlegst, musst du das ? entfernen. URLSearchParams erledigt das automatisch.
  • Kodierung: Sonderzeichen erscheinen prozent-kodiert. Verwende zum Lesen URLSearchParams oder decodeURIComponent(). Beim Erzeugen der URL hilft encodeURIComponent().
  • Blob- und Data-URLs: Wurde der Worker aus einer blob:-URL erzeugt, gibt es normalerweise keinen Query-String. Die Eigenschaft ist dann leer.
  • Service Worker: Ändert sich der Query-String der Skript-URL, sieht der Browser darin einen anderen Worker. Das kann ungewollte Aktualisierungen auslösen oder mehrere Registrierungen erzeugen.
  • Sicherheit: Query-Parameter können in Server-Logs und Caches landen. Übergib darüber keine geheimen Daten wie Tokens, sondern schicke sie mit postMessage().
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. Die Eigenschaft ist nur im Worker-Kontext über self.location erreichbar.