Zusammenfassung
blob: für Chrome 8+, Firefox 6+, Safari 6.0+, Opera 15+
data:application/javascript für Opera 10.60 - 12
eval sonst (IE 10+)
URL.createObjectURL(<Blob blob>)kann verwendet werden, um einen Web-Worker aus einer Zeichenfolge zu erstellen. Der Blob kann mit der veraltetenBlobBuilder API oder dem Konstruktor erstellt werden .Blob
Demo: http://jsfiddle.net/uqcFM/49/
window.URL = window.URL || window.webkitURL;
var response = "self.onmessage=function(e){postMessage('Worker: '+e.data);}";
var blob;
try {
blob = new Blob([response], {type: 'application/javascript'});
} catch (e) {
window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
blob = new BlobBuilder();
blob.append(response);
blob = blob.getBlob();
}
var worker = new Worker(URL.createObjectURL(blob));
worker.onmessage = function(e) {
alert('Response: ' + e.data);
};
worker.postMessage('Test');
Kompatibilität
Web Arbeiter sind in der folgenden Browsern unterstützt Quelle :
- Chrome 3
- Firefox 3.5
- IE 10
- Opera 10.60
- Safari 4
Die Unterstützung dieser Methode basiert auf der Unterstützung der BlobAPI und der URL.createObjectUrlMethode. BlobKompatibilität :
- Chrome 8+ (
WebKitBlobBuilder), 20+ ( BlobKonstruktor)
- Firefox 6+ (
MozBlobBuilder), 13+ ( BlobKonstruktor)
- Safari 6+ (
BlobKonstruktor)
IE10 unterstützt MSBlobBuilderund URL.createObjectURL. Beim Versuch, einen Web Worker aus einer blob:-URL zu erstellen, wird jedoch ein SecurityError ausgelöst.
Opera 12 unterstützt keine URLAPI. Einige Benutzer haben möglicherweise eine gefälschte Version des URLObjekts, dank dieses Hack-Insbrowser.js .
Fallback 1: Daten-URI
Opera unterstützt Daten-URIs als Argument für den WorkerKonstruktor. Hinweis: Vergessen Sie nicht, Sonderzeichen (wie #und %) zu maskieren .
var worker = new Worker('data:application/javascript,' +
encodeURIComponent(response) );
Demo: http://jsfiddle.net/uqcFM/37/
Fallback 2: Eval
eval kann als Fallback für Safari (<6) und IE 10 verwendet werden.
self.onmessage = function(e) {
self.onmessage = null;
eval(e.data);
};
var worker = new Worker('Worker-helper.js');
worker.postMessage(response);