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

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

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

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

コンストラクター

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

プロパティ

EventTarget より継承しています。また、AbstractWorker のメソッドを定義しています。

イベントハンドラー

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

メソッド

EventTarget より継承しています。また、AbstractWorker のメソッドを定義しています。

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

次のコード例では、Worker() コンストラクターを用いて 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)。

仕様

仕様書 策定状況 コメント
HTML Living Standard
Worker の定義
現行の標準  

ブラウザー実装状況

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

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
基本対応Chrome 完全対応 4Edge 完全対応 ありFirefox 完全対応 3.5IE 完全対応 10Opera 完全対応 10.6Safari 完全対応 4WebView Android 完全対応 4Chrome Android 完全対応 18Edge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 11.5Safari iOS 完全対応 5.1Samsung Internet Android 完全対応 あり
Worker() constructorChrome 完全対応 4Edge 完全対応 ありFirefox 完全対応 3.5IE 完全対応 10Opera 完全対応 10.6Safari 完全対応 4WebView Android 完全対応 4Chrome Android 完全対応 18Edge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 11.5Safari iOS 完全対応 5.1Samsung Internet Android 完全対応 あり
onmessageChrome 完全対応 4Edge 完全対応 12Firefox 完全対応 3.5IE 完全対応 10Opera 完全対応 10.6Safari 完全対応 4WebView Android 完全対応 4Chrome Android 完全対応 18Edge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 11.5Safari iOS 完全対応 5.1Samsung Internet Android 完全対応 あり
onmessageerrorChrome 完全対応 60Edge ? Firefox 完全対応 57IE ? Opera 完全対応 47Safari ? WebView Android 完全対応 60Chrome Android 完全対応 60Edge Mobile ? Firefox Android 完全対応 57Opera Android 完全対応 47Safari iOS ? Samsung Internet Android 未対応 なし
postMessageChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 ありIE 完全対応 10
補足
完全対応 10
補足
補足 Internet Explorer does not support Transferable objects.
Opera 完全対応 47Safari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 ありOpera Android 完全対応 47Safari iOS 完全対応 ありSamsung Internet Android 完全対応 あり
terminateChrome 完全対応 4Edge 完全対応 12Firefox 完全対応 3.5IE 完全対応 10Opera 完全対応 10.6Safari 完全対応 4WebView Android 完全対応 4Chrome Android 完全対応 18Edge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 11.5Safari iOS 完全対応 5.1Samsung Internet Android 完全対応 あり

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実装ノートを参照してください。
実装ノートを参照してください。

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

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

関連情報

ドキュメントのタグと貢献者

このページの貢献者: yyss, Kenju
最終更新者: yyss,