Worker

Workerウェブワーカー API のインターフェイスで、スクリプトで生成することができるバックグラウンドタスクを表し、作成元にメッセージを送り返すことができます。

ワーカーは Worker("path/to/worker/script") コンストラクターを呼び出すことで生成されます。

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

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

EventTarget Worker

コンストラクター

Worker()

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

プロパティ

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

メソッド

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

Worker.postMessage()

ワーカーの内部スコープに、あらゆる JavaScript オブジェクトの形式のメッセージも送ることができます。

Worker.terminate()

ワーカーを直ちに終了させます。ワーカーに終了処理を行わせず、直ちに終了させます。 ServiceWorker のインスタンスはこのメソッドを備えていません。

イベント

error

ワーカー内でエラーが発生したときに発行されます。

message

ワーカーの親が、そのワーカーからメッセージを受信したときに発行されます。

messageerror

Worker オブジェクトが シリアライズ解除できないというメッセージを受け取ったときに発行されます。

rejectionhandled

プロミス (Promise) が拒否されるたびに発行されます。拒否を処理するハンドラーがあるかどうかは問いません。

unhandledrejection

拒否を処理するハンドラーのないプロミス (Promise) が拒否されたときに発行されます。

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

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

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

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

仕様書

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

ブラウザーの互換性

BCD tables only load in the browser

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

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

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

関連情報