概要
blob:
Chrome 8 以降、Firefox 6 以降、Safari 6.0 以降、Opera 15 以降の場合
data:application/javascript
オペラ 10.60 - 12 の場合
eval
それ以外の場合 (IE 10 以降)
URL.createObjectURL(<Blob blob>)
文字列から Web ワーカーを作成するために使用できます。BLOB は、非推奨BlobBuilder
のAPIまたはコンストラクターを使用して作成できます。Blob
デモ: http://jsfiddle.net/uqcFM/49/
// URL.createObjectURL
window.URL = window.URL || window.webkitURL;
// "Server response", used in all examples
var response = "self.onmessage=function(e){postMessage('Worker: '+e.data);}";
var blob;
try {
blob = new Blob([response], {type: 'application/javascript'});
} catch (e) { // Backwards-compatibility
window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
blob = new BlobBuilder();
blob.append(response);
blob = blob.getBlob();
}
var worker = new Worker(URL.createObjectURL(blob));
// Test, used in all examples:
worker.onmessage = function(e) {
alert('Response: ' + e.data);
};
worker.postMessage('Test');
互換性
Web ワーカーは、次のブラウザーソースでサポートされています。
- クロム 3
- Firefox 3.5
- IE10
- オペラ 10.60
- サファリ4
Blob
このメソッドのサポートは、 API とメソッドのサポートに基づいていますURL.createObjectUrl
。Blob
互換性:
- Chrome 8 以降 (
WebKitBlobBuilder
)、20 以降 (Blob
コンストラクター)
- Firefox 6 以降 (
MozBlobBuilder
)、13 以降 (Blob
コンストラクター)
- Safari 6+ (
Blob
コンストラクター)
IE10 は と をサポートしMSBlobBuilder
ていURL.createObjectURL
ます。ただし、blob:
-URL から Web Worker を作成しようとすると、SecurityError がスローされます。
URL
Opera 12 はAPIをサポートしていません。のこのハッキングのURL
おかげで、一部のユーザーはオブジェクトの偽バージョンを持っている可能性があります。browser.js
フォールバック 1: データ URI
Worker
Opera はコンストラクタへの引数として data-URI をサポートしています。注:特殊文字(#
や など)をエスケープすることを忘れないでください%
。
// response as defined in the first example
var worker = new Worker('data:application/javascript,' +
encodeURIComponent(response) );
// ... Test as defined in the first example
デモ: http://jsfiddle.net/uqcFM/37/
フォールバック 2: 評価
eval
Safari (<6) および IE 10 のフォールバックとして使用できます。
// Worker-helper.js
self.onmessage = function(e) {
self.onmessage = null; // Clean-up
eval(e.data);
};
// Usage:
var worker = new Worker('Worker-helper.js');
// `response` as defined in the first example
worker.postMessage(response);
// .. Test as defined in the first example