Edge 中的 blob 破坏了 HTTPS 安全性
HTTPS security is compromised by blob in Edge
我正在尝试从 blob 创建网络工作者:
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
此外,"inside worker" 永远不会打印出来。
如何让这段代码在 Edge 中正常工作?
虽然我不完全了解内部工作原理,但这似乎是由竞争条件引起的,在这种情况下,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
一个更高级的解决方案将涉及添加代码 inside worker to postMessage()
回到主页触发对 URL.revokeObjectUrl()
的调用。这可能是 "correct" 的方法,但上面的解决方法要简单得多。
我正在尝试从 blob 创建网络工作者:
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
此外,"inside worker" 永远不会打印出来。
如何让这段代码在 Edge 中正常工作?
虽然我不完全了解内部工作原理,但这似乎是由竞争条件引起的,在这种情况下,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
一个更高级的解决方案将涉及添加代码 inside worker to postMessage()
回到主页触发对 URL.revokeObjectUrl()
的调用。这可能是 "correct" 的方法,但上面的解决方法要简单得多。