DedicatedWorkerGlobalScope: message event

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Hinweis: Diese Funktion ist nur in Dedicated Web Workers verfügbar.

Das message-Ereignis wird auf einem DedicatedWorkerGlobalScope-Objekt ausgelöst, wenn der Worker eine Nachricht von seinem Elternteil erhält (d.h. wenn das Elternteil eine Nachricht mittels Worker.postMessage() sendet).

Dieses Ereignis ist nicht abbruchsicher und wird nicht gebubbelt.

Syntax

Verwenden Sie den Ereignisnamen in Methoden wie addEventListener(), oder setzen Sie eine Ereignis-Handler-Eigenschaft.

js
addEventListener("message", (event) => { })

onmessage = (event) => { }

Ereignistyp

Ereigniseigenschaften

Diese Schnittstelle erbt auch Eigenschaften von ihrem Elternteil, Event.

MessageEvent.data Schreibgeschützt

Die Daten, die vom Nachrichtensender gesendet wurden.

MessageEvent.origin Schreibgeschützt

Ein String, der den Ursprung des Nachrichtensenders darstellt.

MessageEvent.lastEventId Schreibgeschützt

Ein String, der eine eindeutige ID für das Ereignis darstellt.

MessageEvent.source Schreibgeschützt

Eine MessageEventSource (die ein Window, ein MessagePort oder ein ServiceWorker-Objekt sein kann), das den Nachrichtensender darstellt.

MessageEvent.ports Schreibgeschützt

Ein Array von MessagePort-Objekten, die die Ports darstellen, die mit dem Kanal assoziiert sind, durch den die Nachricht gesendet wird (wo zutreffend, z. B. bei Kanalnachrichten oder beim Senden einer Nachricht an einen gemeinsamen Worker).

Beispiel

Der folgende Codeausschnitt zeigt die Erstellung eines Worker-Objekts mit dem Worker()-Konstruktor. Nachrichten werden an den Worker übergeben, wenn sich der Wert im Formulareingabefeld first ändert. Ein onmessage-Handler ist ebenfalls vorhanden, um Nachrichten zu bearbeiten, die vom Worker zurückgesendet werden.

js
// main.js

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

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

// worker.js

self.onmessage = (e) => {
  console.log("Message received from main script");
  const workerResult = `Result: ${e.data[0] * e.data[1]}`;
  console.log("Posting message back to main script");
  postMessage(workerResult);
};

Im main.js-Skript wird ein onmessage-Handler verwendet, um Nachrichten aus dem Worker-Skript zu bearbeiten:

js
// main.js

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

Alternativ kann das Skript auf die Nachricht mit addEventListener() lauschen:

js
// worker.js

self.addEventListener("message", (e) => {
  result.textContent = e.data;
  console.log("Message received from worker");
});

Beachten Sie, dass im Hauptskript onmessage auf myWorker aufgerufen werden muss, während im Worker-Skript nur onmessage benötigt wird, da der Worker effektiv der globale Kontext ist (DedicatedWorkerGlobalScope).

Ein vollständiges Beispiel finden Sie in unserem Grundlegendes Beispiel für einen dedizierten Worker (dedizierten Worker ausführen).

Spezifikationen

Specification
HTML
# event-message
HTML
# handler-messageeventtarget-onmessage

Browser-Kompatibilität

Siehe auch