Worker

WorkerWeb Workers API のインターフェイスです。スクリプトで生成することができるバックグラウンドタスクを表し、作成元にメッセージを送り返すことができます。ワーカーは Worker("path/to/worker/script") コンストラクターを呼び出すことで生成することができます。

ワーカーは同じ親ページの同一 オリジン 内でホストされている限り、他の新しいワーカーを生成することができます (注: 入れ子になったワーカーは WebKit では未実装です)。

利用可能なすべてのインターフェイスと関数 がすべて Worker の中で利用できるとは限りません。ワーカーはネットワーク通信のために XMLHttpRequest を使うことができますが、 responseXML 属性と channel 属性は常に null になります。 (fetch も利用可能であり、このような制限はありません。)

コンストラクター

Worker()
指定された URLにあるスクリプトを実行する専用ウェブワーカーのインスタンスを生成します。また、 Blob URL を用いてワーカーを生成することもできます。

プロパティ

親インターフェイスである EventTarget からプロパティを継承しています。

イベントハンドラー

Worker.onerror
EventListener であり、 ErrorEvent の type が error であるイベントが発行されるたびに呼び出されます。
Worker.onmessage (en-US)
EventListener であり、 MessageEvent の type が message であるイベントが発行されるたびに呼び出されます。すなわち、 DedicatedWorkerGlobalScope.postMessage (en-US) を経由して親文書にメッセージが送信されます。メッセージは data (en-US) プロパティに格納されます。
Worker.onmessageerror
イベントハンドラーであり、 messageerror イベントが発行されるたびに呼び出されるコードを表します。

メソッド

親である EventTarget からメソッドを継承しています。

Worker.postMessage() (en-US)
ワーカーの内部スコープに、あらゆる JavaScript オブジェクトの形式のメッセージも送ることができます。
Worker.terminate()
ワーカーを直ちに終了させます。ワーカーに終了処理を行わせず、直ちに終了させます。 ServiceWorker インスタンスはこのメソッドを備えていません。

イベント

message (en-US)
ワーカーの親が、そのワーカーからメッセージを受信したときに発行されます。
onmessage (en-US) プロパティからも利用できます。
messageerror (en-US)
Worker オブジェクトが シリアライズ解除できないというメッセージを受け取ったときに発行されます。
onmessageerror プロパティからも利用できます。
rejectionhandled
Promise が拒否されるたびに発行されます。拒否を処理するハンドラーがあるかどうかは問いません。
onrejectionhandled イベントハンドラープロパティからも利用できます。
unhandledrejection
拒否を処理するハンドラーのない Promise が拒否されたときに発行されます。
onunhandledrejection イベントハンドラープロパティからも利用できます。

次のコード例では、 Worker オブジェクトを、 Worker() コンストラクターを用いて生成しています。

var myWorker = new Worker('/worker.js');
var first = document.querySelector('input#number1');
var second = document.querySelector('input#number2');

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

完全な例は、 Basic dedicated worker example (専用ワーカーを実行) を参照してください。

仕様書

Specification
HTML Standard (HTML)
# dedicated-workers-and-the-worker-interface

ブラウザーの互換性

BCD tables only load in the browser

ワーカーの種類に応じて対応状況が異なります。詳しくは、それぞれの種類のワーカーのページをご覧ください。

オリジンをまたいだワーカーのエラーの動作

古いバージョンのブラウザーでオリジンをまたいでワーカーのスクリプトを読み込もうとすると、 SecurityError が発生していました。最近は、 error イベントが発行されるようになりました。

関連情報