MessageEvent

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: Dieses Feature ist verfügbar in Web Workers.

Das MessageEvent-Interface repräsentiert eine Nachricht, die von einem Zielobjekt empfangen wird.

Dies wird verwendet, um Nachrichten darzustellen in:

Die durch dieses Ereignis ausgelöste Aktion wird in einer Funktion definiert, die als Ereignis-Handler für das relevante message-Ereignis festgelegt ist.

Event MessageEvent

Konstruktor

MessageEvent()

Erstellt ein neues MessageEvent.

Instanz-Eigenschaften

Dieses Interface erbt auch Eigenschaften von seinem Elternteil, Event.

MessageEvent.data Nur lesbar

Die von dem Nachrichten-Emitter gesendeten Daten.

MessageEvent.origin Nur lesbar

Ein String, der den Ursprung des Nachrichten-Emitters darstellt.

MessageEvent.lastEventId Nur lesbar

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

MessageEvent.source Nur lesbar

Eine MessageEventSource (dies kann ein WindowProxy, MessagePort oder ServiceWorker Objekt sein), das den Nachrichten-Emitter darstellt.

MessageEvent.ports Nur lesbar

Ein Array von MessagePort-Objekten, das alle MessagePort-Objekte enthält, die mit der Nachricht gesendet wurden, in der richtigen Reihenfolge.

Instanz-Methoden

Dieses Interface erbt auch Methoden von seinem Elternteil, Event.

initMessageEvent() Veraltet

Initialisiert ein Nachrichten-Ereignis. Verwenden Sie dies nicht mehrverwenden Sie stattdessen den MessageEvent()-Konstruktor.

Beispiele

In unserem einfachen Beispiel mit einem geteilten Worker (geteilten Worker ausführen) haben wir zwei HTML-Seiten, von denen jede ein bisschen JavaScript verwendet, um eine Berechnung durchzuführen. Die verschiedenen Skripte benutzen dieselbe Worker-Datei, um die Berechnung durchzuführen — sie können beide darauf zugreifen, selbst wenn ihre Seiten in verschiedenen Fenstern ausgeführt werden.

Der folgende Codeausschnitt zeigt die Erstellung eines SharedWorker-Objekts unter Verwendung des SharedWorker()-Konstruktors. Beide Skripte enthalten dies:

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

Beide Skripte greifen dann auf den Worker über ein MessagePort-Objekt zu, das unter Verwendung der SharedWorker.port-Eigenschaft erstellt wurde. Wenn das onmessage-Ereignis mit addEventListener angehängt wird, wird der Port manuell mithilfe seiner start()-Methode gestartet:

js
myWorker.port.start();

Wenn der Port gestartet wird, senden beide Skripte Nachrichten an den Worker und verarbeiten Nachrichten, die von ihm gesendet werden, mit port.postMessage() und port.onmessage:

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

second.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");
};

Innerhalb des Workers verwenden wir den onconnect-Handler, um eine Verbindung zum oben genannten Port herzustellen. Die mit diesem Worker assoziierten Ports sind im ports-Eigentum des connect-Ereignisses zugänglich — wir verwenden dann die start()-Methode von MessagePort, um den Port zu starten, und den onmessage-Handler, um Nachrichten zu bearbeiten, die von den Haupt-Threads gesendet werden.

js
onconnect = (e) => {
  const port = e.ports[0];

  port.addEventListener("message", (e) => {
    const workerResult = `Result: ${e.data[0] * e.data[1]}`;
    port.postMessage(workerResult);
  });

  port.start(); // Required when using addEventListener. Otherwise called implicitly by onmessage setter.
};

Spezifikationen

Specification
HTML Standard
# the-messageevent-interface

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch

  • ExtendableMessageEvent — ähnlich diesem Interface, wird aber in Interfaces verwendet, die den Autoren mehr Flexibilität bieten müssen.