Edge中的blob会破坏HTTPS安全性

时间:2018-05-25 23:34:43

标签: javascript blob microsoft-edge web-worker

我正在尝试从blob创建一个Web worker:

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 :(得分:1)

虽然我并不完全了解相互作用,但这似乎是由于竞争条件导致blob在创建Web工作者之前被撤销。

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()的调用。这可能是“正确”的方法,但上面的解决方法明显更简单。