Signatur
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
?, 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);
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));
};
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);
// Wichtig · Fallstricke
- Nur lesbar: Anders als bei
window.location.searchbewirkt eine Zuweisung nichts. Eine Navigation gibt es in Workern nicht. - Führendes
?: Wenn du den Rohwert selbst zerlegst, musst du das?entfernen.URLSearchParamserledigt das automatisch. - Kodierung: Sonderzeichen erscheinen prozent-kodiert. Verwende zum Lesen
URLSearchParamsoderdecodeURIComponent(). Beim Erzeugen der URL hilftencodeURIComponent(). - 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.locationerreichbar.