Résumé
-
blob:
pour Chrome 8+, Firefox 6+, Safari 6.0+, Opera 15+.
-
data:application/javascript
pour Opera 10.60 - 12
-
eval
sinon (IE 10+)
URL.createObjectURL(<Blob blob>)
peut être utilisé pour créer un travailleur Web à partir d'une chaîne de caractères. Le blob peut être créé à l'aide de la fonction BlobBuilder
API déprécié ou le Blob
Constructeur .
Démonstration : 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');
Compatibilité
Les travailleurs Web sont pris en charge par les navigateurs suivants source :
- Chrome 3
- Firefox 3.5
- IE 10
- Opera 10.60
- Safari 4
Le support de cette méthode est basé sur le support de l'option Blob
et l'API URL.createObjectUrl
méthode. Blob
compatibilité :
- Chrome 8+ (
WebKitBlobBuilder
), 20+ ( Blob
constructeur)
- Firefox 6+ (
MozBlobBuilder
), 13+ ( Blob
constructeur)
- Safari 6+ (
Blob
constructeur)
IE10 prend en charge MSBlobBuilder
y URL.createObjectURL
. Cependant, en essayant de créer un Web Worker à partir d'une blob:
-L'URL génère une SecurityError.
Opera 12 ne prend pas en charge URL
API. Certains utilisateurs peuvent avoir une fausse version de l URL
grâce à ce piratage dans browser.js
.
Fallback 1 : data-URI
Opera prend en charge les URL de données en tant qu'argument de la fonction Worker
constructeur. Note : N'oubliez pas de échapper aux caractères spéciaux (Par exemple #
y %
).
// response as defined in the first example
var worker = new Worker('data:application/javascript,' +
encodeURIComponent(response) );
// ... Test as defined in the first example
Démonstration : http://jsfiddle.net/uqcFM/37/
Solution de repli 2 : Eval
eval
peut être utilisé comme solution de rechange pour Safari (<6) et 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
0 votes
Je me demande si CORS ( w3.org/TR/cors ) serait utile. HTMl5rocks utilise un langage fort "doit" lorsqu'il s'agit de la politique de même origine pour les travailleurs ( html5rocks.com/fr/tutoriels/travailleurs/éléments de base ) donc peut-être que CORS n'est pas d'une grande aide ici. L'avez-vous essayé ?