Хотя я не совсем осведомлен о взаимодействиях, похоже, что это вызвано состоянием гонки, когда BLOB-объект аннулируется до создания веб-работника.
Помещение URL.revokeObjectURL()
внутрь setTimeout()
с достаточной задержкой устраняет проблему:
var workerUrl = URL.createObjectURL(new Blob(["console.log('inside worker')"], {type: "text/javascript"}));
var worker = new Worker(workerUrl);
setTimeout(function() {
URL.revokeObjectURL(workerUrl);
}, 500); // you may have to increase the delay here
Более продвинутое решение будет включать добавление кода внутри рабочего к postMessage()
назад на главную страницу, вызывая вызов URL.revokeObjectUrl()
.Вероятно, это будет «правильный» способ сделать это, но обходной путь, описанный выше, значительно проще.