Я пытаюсь загрузить файлы javascript через веб-воркеров, используя XHR и вводя их в тело через URL-адрес blob. Целесообразно ли это делать?
Пример кода:
var worker = "https://wrapperbi.com/worker/worker.js";
let scriptWrappers = 'importScripts(\'' + worker + '\')', //No I18N
workerPaths = window.URL.createObjectURL(new Blob([scriptWrappers])),
dataObj = {'responseType':'blob', 'requestURL': "https://wrapperbi.com/js/manifest.js"};
let assetsWorkerss = new Worker(workerPaths);
assetsWorkerss.postMessage(dataObj);
assetsWorkerss.onmessage = function (event) {
var script = document.createElement('script'),
src = URL.createObjectURL(event.data);
script.src = src;
document.body.appendChild(script);
Пример кода рабочего файла:
onmessage = function (event) {
var requestType = event.data.requestType ? event.data.requestType : 'GET',
isAsync = typeof event.data.isAsync === "undefined" ? true : event.data.isAsync,
responseType = event.data.responseType ? event.data.responseType : 'json',
xhr = new XMLHttpRequest();
xhr.open(requestType, event.data.requestURL, isAsync);
xhr.onreadystatechange = function() {
if(this.readyState === 4 && this.status === 200){
postMessage(this.response);
}
};
xhr.onerror = function () {
postMessage(this.status);
};
xhr.responseType = responseType;
if(event.data.isCrossDomain) {
xhr.withCredentials = event.data.isCrossDomain;
}
xhr.send();
}