2noの日記

メモ用

IE9 以下で Web Worker

IE9 以下は Web Worker はサポートしていない為、下記のスクリプトが必要。
https://code.google.com/p/ie-web-worker/
https://github.com/in2rd/ie-web-worker/

Worker の仕様上、コンストラクタは必須であり、インスタンスを生成した直後にスクリプトの読み込みが開始されてしまう。これによる問題としては、new の後に onerror、onmessage を設定していても開始直後は未定義になってしまい、スレッド内で postMessage を呼び出しても処理されない(ちなみに Worker を正式サポートしている各ブラウザでは、この問題は生じない)。

setTimeout を駆使する事で、この問題は対応出来る。

▼対応例

// スレッド内の処理

// onmessage に処理が行かない。
postMessage('test1');

// onmessage に処理が行く。
setTimeout(function() { postMessage('test2'); }, 1);