DedicatedWorkerGlobalScope.postMessage()

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.

postMessage()DedicatedWorkerGlobalScope インターフェイスのメソッドで、それを生成したメインスレッドにメッセージを送信します。

これは data 引数を受け入れ、そこにワーカーからメインスレッドにコピーされるデータが入ります。 data は任意の値、または構造化複製アルゴリズムで処理される JavaScript オブジェクトであり、循環参照を含むことができます。

このメソッドは、メインスレッドに移譲するための移譲可能オブジェクトの配列もオプションで受け入れます。 data 引数とは異なり、移譲されたオブジェクトはワーカスレッドでは使えなくなります(可能であれば、オブジェクトは高性能なゼロコピー処理で移譲されます)。

ワーカーを生成したメインスコープは、Worker.postMessage メソッドを使用して、ワーカーを生成したスレッドに情報を送り返すことができます。

構文

js
postMessage(aMessage, transferList)

引数

aMessage

メインスレッドに配信するオブジェクト。これは Worker.message_event に配信されるイベント内の data フィールドに格納されます。 これは、構造化複製アルゴリズムによって処理される任意の値または JavaScript オブジェクトであり、循環参照を含むことができます。

transferList 省略可

所有権を移譲するための、移譲可能オブジェクト配列(オプション)。 オブジェクトの所有権が移譲された場合、そのオブジェクトは送信元のコンテキストでは使用できなくなり、 送信先のメインスレッドでのみ利用できるようになります。

移譲可能オブジェクトのみが移譲可能です。

返値

なし (undefined)。

以下のコードでは worker.js を示しています。このコードでは onmessage ハンドラーを使用して、メイン スクリプトからのメッセージを処理しています。 ハンドラーの内部で計算が行われ、そこから結果メッセージが作成されます。これは postMessage(workerResult); を使用してメインスレッドに返されます。

js
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);
};

メインスクリプトでは onmessageWorker オブジェクトに対して呼び出す必要がありますが、ワーカススクリプトの内部では onmessage だけで済みます。ワーカーは事実上グローバルスコープ (DedicatedWorkerGlobalScope) になっているためです。

完全な例は、基本的な専用ワーカーの例を参照してください(専用ワーカーを実行)。

メモ: postMessage() は一度に単一のオブジェクトしか送ることができません。上で見たように、複数の値を渡したい場合は、配列を送ることができます。

仕様書

Specification
HTML
# dom-dedicatedworkerglobalscope-postmessage-dev

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
postMessage

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
See implementation notes.
Has more compatibility info.

関連情報

所属先の DedicatedWorkerGlobalScope インターフェイス。