Безопасность HTTPS нарушена блобом в Edge - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь создать веб-работника из большого двоичного объекта:

var workerUrl = URL.createObjectURL(new Blob(["console.log('inside worker')"], {type: "text/javascript"}));
var worker = new Worker(workerUrl);
URL.revokeObjectURL(workerUrl);

Этот код отлично работает в Chrome и Firefox, но при запуске его в Edge я получаю эту ошибку в консоли JavaScript:

SEC7111: HTTPS security is compromised by blob:https://example.com/b6996513-0a45-443b-b163-1fb2a77ac2a8

Более того, «внутренний работник» никогда не печатается.

Как мне заставить этот код правильно работать в Edge?

1 Ответ

0 голосов
/ 26 мая 2018

Хотя я не совсем осведомлен о взаимодействиях, похоже, что это вызвано состоянием гонки, когда 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().Вероятно, это будет «правильный» способ сделать это, но обходной путь, описанный выше, значительно проще.

...