Edge中Blob引发HTTPS安全问题,Blob创建Web Worker失败如何解决?
解决Edge浏览器中Blob创建Web Worker的SEC7111错误
你提到的这段用Blob创建Web Worker的代码在Chrome和Firefox中正常运行,但在Edge里触发SEC7111安全错误,且Worker内的代码不执行,这个问题我之前帮人排查过,核心原因是Edge对Blob URL的生命周期管理和安全校验有特殊要求,下面是具体的修复方案:
关键修复点
- 不要在创建Worker后立即调用
URL.revokeObjectURL(workerUrl),必须等Worker确认加载完成或执行完毕后再撤销资源引用 - 确保Blob内的脚本语法规范(虽然你的代码语法没问题,但规范写法能避免Edge的潜在解析问题)
修正后的代码示例
// 创建包含Worker脚本的Blob const workerBlob = new Blob(["console.log('inside worker');"], { type: "text/javascript" }); const workerUrl = URL.createObjectURL(workerBlob); const worker = new Worker(workerUrl); // 监听Worker加载完成事件,确认脚本已加载后再撤销URL worker.onload = function() { console.log('Worker加载完成'); URL.revokeObjectURL(workerUrl); }; // 监听Worker错误事件,出错时也记得清理资源 worker.onerror = function(error) { console.error('Worker执行出错:', error); URL.revokeObjectURL(workerUrl); };
错误原因详解
Edge浏览器在HTTPS环境下对Blob URL的安全校验更严格,同时它的Worker加载机制对资源引用的生命周期要求更高:当你创建Worker后,浏览器需要短暂的时间去读取Blob中的脚本内容并完成加载,如果此时立刻撤销Blob URL,Worker会失去资源来源,直接触发SEC7111安全错误,同时脚本根本没机会执行。
通过在onload事件中延迟撤销URL,我们确保Worker已经成功获取并加载了Blob内的脚本,既解决了安全错误,也能让Worker代码正常运行。
内容的提问来源于stack exchange,提问作者Chris Smith
相关产品推荐
相关产品推荐

