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 Blob
API und der URL.createObjectUrl
Methode. Blob
Kompatibilität :
- Chrome 8+ (
WebKitBlobBuilder
), 20+ ( Blob
Konstruktor)
- Firefox 6+ (
MozBlobBuilder
), 13+ ( Blob
Konstruktor)
- Safari 6+ (
Blob
Konstruktor)
IE10 unterstützt MSBlobBuilder
und URL.createObjectURL
. Beim Versuch, einen Web Worker aus einer blob:
-URL zu erstellen, wird jedoch ein SecurityError ausgelöst.
Opera 12 unterstützt keine URL
API. Einige Benutzer haben möglicherweise eine gefälschte Version des URL
Objekts, dank dieses Hack-Insbrowser.js
.
Fallback 1: Daten-URI
Opera unterstützt Daten-URIs als Argument für den Worker
Konstruktor. 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);