Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

SharedWorker: SharedWorker() Konstruktor

Baseline 2026 *
Neu verfügbar

Seit May 2026 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.

* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.

Warnung: Das Skript, das an den url Parameter übergeben wird, wird ausgeführt. Solche APIs sind bekannt als Injection Sinks und können ein Vektor für Cross-Site-Scripting (XSS) Angriffe sein.

Sie können dieses Risiko mindern, indem Sie eine Content Security Policy (CSP) verwenden, die die Orte einschränkt, von denen Skripte geladen werden können, und indem Sie immer TrustedScriptURL Objekte anstelle von Strings zuweisen und Trusted Types durchsetzen. Siehe Sicherheitsüberlegungen im Worker() Konstruktor für weitere Informationen.

Der SharedWorker() Konstruktor erstellt ein SharedWorker Objekt, das das Skript an der angegebenen URL ausführt.

Syntax

js
new SharedWorker(url)
new SharedWorker(url, name)
new SharedWorker(url, options)

Parameter

url

Ein TrustedScriptURL Objekt oder ein String, der die URL des Skripts oder Moduls darstellt, das der Worker ausführen wird. Diese muss gleichherkunft mit dem Dokument des Aufrufenden sein oder eine blob: oder data: URL. Die URL wird relativ zur aktuellen Position der HTML-Seite aufgelöst.

name Optional

Ein String, der einen identifizierenden Namen für den SharedWorkerGlobalScope angibt, der den Gültigkeitsbereich des Workers repräsentiert. Dies ist nützlich für das Erstellen neuer Instanzen desselben SharedWorker und zum Debuggen.

options Optional

Ein Objekt, das Options-Eigenschaften enthält, die beim Erstellen der Objektinstanz festgelegt werden können. Verfügbare Eigenschaften sind wie folgt:

type

Ein String, der den Typ des zu erstellenden Workers angibt. Der Wert kann classic oder module sein. Der Standardwert ist classic.

credentials

Ein String, der angibt, ob der Browser Anmeldeinformationen sendet, wenn Module in einen Moduelworker importiert werden. Die erlaubten Werte sind dieselben, die auch an die fetch() Anfrage übergeben werden können: omit, same-origin oder include. Der Standardwert ist same-origin (enthält nur Anmeldeinformationen für Anfragen gleicher Herkunft).

Dies wird für klassische Worker ignoriert.

name

Ein String, der einen identifizierenden Namen für den SharedWorkerGlobalScope angibt, der den Gültigkeitsbereich des Workers repräsentiert, was hauptsächlich für Debugging-Zwecke nützlich ist.

extendedLifetime

Ein Boolean, der angibt, ob dem Shared Worker erlaubt ist, für eine kurze Zeitspanne am Leben zu bleiben, nachdem alle Seiten, die ihn nutzen, weg navigiert oder geschlossen wurden.

Dies soll Arbeit ermöglichen, nachdem der Benutzer von der Seite weg navigiert hat, wie das Schreiben von Zustandsinformationen in den Speicher oder das Senden von Analysedaten zurück an Server. Die genaue Zeit, die der Worker lebendig bleibt, hängt vom Browser ab und kann zwischen 10 Sekunden und 5 Minuten liegen (Chrome verwendet 30 Sekunden).

Für weitere Informationen siehe Lebensdauer des Shared Workers in Using web workers.

sameSiteCookies

Ein String, der angibt, welche SameSite Cookies für den Worker verfügbar sein sollen. Kann einen der folgenden beiden Werte haben:

'all'

SameSite=Strict, SameSite=Lax und SameSite=None Cookies werden alle für den Worker verfügbar sein. Diese Option wird nur in Erstanbieter-Kontexten unterstützt und ist der Standardwert in Erstanbieter-Kontexten.

'none'

Nur SameSite=None Cookies sind für den Worker verfügbar. Diese Option wird in Erstanbieter- und Drittanbieter-Kontexten unterstützt und ist der Standardwert in Drittanbieter-Kontexten.

Warnung: Sobald ein Shared Worker mit einer bestimmten URL und name läuft, sind die Optionen type, credentials und extendedLifetime festgelegt. Das Erstellen eines neuen Shared Workers für dasselbe Skript und name wird zu einem Fehler führen, wenn Sie andere Werte für diese Optionen angeben. Wenn andere Optionen für dasselbe Skript erforderlich sind, dann starten Sie zwei Worker mit unterschiedlichen name Werten.

Ausnahmen

SecurityError DOMException

Wird ausgelöst, wenn das Dokument keine Worker starten darf, zum Beispiel wenn die URL eine ungültige Syntax hat oder die Same-Origin-Policy verletzt wird, oder wenn der sameSiteCookies Wert im gegebenen Kontext nicht unterstützt wird.

NetworkError DOMException

Wird ausgelöst, wenn der MIME-Typ des Worker-Skripts inkorrekt ist. Es sollte immer text/javascript sein (aus historischen Gründen können andere JavaScript MIME-Typen akzeptiert werden).

SyntaxError DOMException

Wird ausgelöst, wenn url nicht geparst werden kann.

TypeError

Wird ausgelöst, wenn der url Parameter ein String ist, wenn Trusted Types durch eine CSP erzwungen werden und keine Standardrichtlinie definiert ist.

Beschreibung

Der SharedWorker() Konstruktor erstellt ein SharedWorker Objekt, das das klassische Skript oder Modul an der angegebenen URL ausführt.

Das Skript muss gleichherkunft mit dem zugehörigen Dokument sein, kann jedoch selbst Skripte oder Module importieren, die aus anderer Herkunft stammen (sofern sie durch CORS und andere Beschränkungen zugelassen sind). Wenn ein Worker aus fremder Herkunft notwendig ist, müssen Nutzer ihn aus einem zwischengeschalteten gleichherkunftlichen Worker oder einem Blob laden.

Für weitere Informationen sehen Sie Beschreibung im Worker() Konstruktor.

Beispiele

Der Kürze halber verwenden die folgenden Beispiele keine Trusted Types. In der Produktion sollte Ihr Code immer Trusted Types verwenden, wenn Daten von Benutzern in Injection Sinks übergeben werden.

Für ein Beispiel siehe Verwendung von Trusted Types in den Worker() Konstruktor-Beispielen.

Grundlegende Verwendung

Der folgende Codeausschnitt zeigt die Erstellung eines SharedWorker Objekts mit dem SharedWorker() Konstruktor und die anschließende Nutzung des Objekts:

js
const myWorker = new SharedWorker("worker.js");

myWorker.port.start();

[first, second].forEach((input) => {
  input.onchange = () => {
    myWorker.port.postMessage([first.value, second.value]);
    console.log("Message posted to worker");
  };
});

myWorker.port.onmessage = (e) => {
  result1.textContent = e.data;
  console.log("Message received from worker");
};

Für ein vollständiges Beispiel siehe unser Einfaches Shared Worker Beispiel (führen Sie den Shared Worker aus.)

Konstruktion eines bereits laufenden Workers wird den bestehenden Worker wiederverwenden

Wenn Sie einen neuen Shared Worker mit denselben Optionen wie ein bereits laufender Shared Worker konstruieren, wird der bestehende Shared Worker wiederverwendet.

js
const worker1 = new SharedWorker("./worker.js");

// This will reuse worker1 for worker2
const worker2 = new SharedWorker("./worker.js");

Konstruktion eines Shared Workers mit Optionen

Der folgende Codeausschnitt zeigt die Erstellung eines SharedWorker Objekts mit dem SharedWorker() Konstruktor unter Verwendung der extendedLifetime Option.

js
const worker = new SharedWorker("worker.js", { extendedLifetime: true });

worker.addEventListener("error", (event) => {});

Wenn unterstützt, wird dieser Shared Worker für eine kurze Zeit weiterleben, nachdem der Benutzer von der Seite weg navigiert hat.

Shared Worker mit unterschiedlichen Optionen

Dieses Beispiel zeigt, wie Sie Shared Worker mit unterschiedlichen Konstrukturoptionen starten können, indem Sie jedem einen eindeutigen Namen geben.

Zuerst demonstrieren wir, was passiert, wenn Sie dasselbe Skript und name mit unterschiedlichen Optionen verwenden. Dieser Code würde worker2 error on instantiation: in die Konsole loggen, weil eine Instanz die extendedLifetime Option setzt und die andere nicht. Dasselbe würde passieren, wenn wir unterschiedliche type oder credentials Werte setzen würden.

js
const worker = new SharedWorker("worker.js", { extendedLifetime: true });

// Construct the same shared worker with different options.
const worker2 = new SharedWorker("worker.js");

// Handle constructor errors
worker2.addEventListener("error", (event) => {
  console.log(`worker2 error on instantiation: ${event}`);
});

Der folgende Code erstellt einen zweiten Worker aus demselben Skript, aber mit einem anderen Namen und Optionen. Kein Fehler wird in die Konsole geloggt, da die Shared Worker unterschiedlich sind.

js
const worker = new SharedWorker("worker.js", { extendedLifetime: true });

// Start a second instance of worker.js
const worker2 = new SharedWorker("./worker.js", {
  name: "worker2",
  credentials: "omit",
});

worker2.port.start();

Spezifikationen

Spezifikation
HTML
# dom-sharedworker-dev

Browser-Kompatibilität

Siehe auch