--- title: Worker slug: Web/API/Worker tags: - API - DOM - Interface - JavaScript - Reference - Web Workers - Worker - Workers translation_of: Web/API/Worker ---

{{APIRef("Web Workers API")}}

Web Workers APIWorker インターフェイスはバックグラウンドで行われるタスクを実行することができ、そのタスクは簡単に生成され、かつ作成元にメッセージを送り返すことができます。Worker() コンストラクターを呼び出しワーカースレッドを走らせるスクリプトを特定してあげるだけでワーカーオブジェクトを作成することができます。

ワーカーは同じ親ページの同一 オリジン 内でホストされている限り、他の新しいワーカーを発生させる可能性があります (注記: 入れ子の worker は WebKit で未実装です)。それにくわえて、ワーカーはネットワーク I/O のための XMLHttpRequest を使用することもあります。なお、XMLHttpRequestresponseXMLchannel 属性は常に null を返す決まりです。

必ずしも すべてのインターフェイスと関数Worker のスクリプトに関連づいているわけではありません。

Firefox において、ワーカーをエクステンションを用いて js-ctypes にアクセスしたい場合、{{ domxref("ChromeWorker") }} オブジェクトを代わりに使用しなくてはいけません。

コンストラクター

{{domxref("Worker.Worker", "Worker()")}}
特有の URL で動作する専用ワーカーのインスタンスを生成することができます。また、Blobs を用いてワーカーを生成することもできます。

プロパティ

{{domxref("EventTarget")}} より継承しています。また、{{domxref("AbstractWorker")}} のメソッドを定義しています。

イベントハンドラー

{{domxref("AbstractWorker.onerror")}}
error タイプの {{domxref("ErrorEvent")}} がワーカーを通して発生するとき、常に {{ domxref("EventListener") }} を呼びます。これは {{domxref("AbstractWorker")}} からの継承メソッドです。
{{domxref("Worker.onmessage")}}
message タイプの {{domxref("MessageEvent")}} がワーカーを通して発生するときは常に {{ domxref("EventListener") }} を呼びます。例えば、{{domxref("DedicatedWorkerGlobalScope.postMessage")}} を経由して親要素のドキュメントにメッセージが送信されます。メッセージは {{domxref("MessageEvent.data", "data")}} プロパティに保存されます。
{{domxref("Worker.onmessageerror")}}
{{event("messageerror")}} イベントが発生したときに呼び出されるコードを表す {{domxref("EventHandler")}} です。

メソッド

{{domxref("EventTarget")}} より継承しています。また、{{domxref("AbstractWorker")}} のメソッドを定義しています。

{{domxref("Worker.postMessage()")}}
ワーカーの内部スコープにメッセージを送ることができます。このメッセージは、いかなる JavaScript のオブジェクトでも送ることができます。
{{domxref("Worker.terminate()")}}
ワーカーを直ちに終了させます。実行中の処理は完了を待たずに終了させられます。ServiceWorker インスタンスはこのメソッドを備えていません。

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

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

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

完全なサンプルは次のリンクより御覧ください:Basic dedicated worker example (run dedicated worker)。

仕様

仕様書 策定状況 コメント
{{SpecName('HTML WHATWG', "#worker", "Worker")}} {{Spec2('HTML WHATWG')}}  

ブラウザー実装状況

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

{{Compat("api.Worker")}}

クロスオリジン worker エラーの動作

古いバージョンのブラウザーでクロスオリジンの worker のスクリプトを読み込もうとすると、SecurityError が発生していました。仕様が変わったため、新しいブラウザーでは {{event("error")}} イベントが発生します。この処理方法について詳しくは クロスオリジンの Worker 読み込みが例外の代わりに error イベントを発生させるようになり、サンドボックス化された iframe 内の Worker が禁止されます をご覧ください。

関連情報