Joe*_*ill 8 javascript google-chrome-extension webassembly
在我的扩展程序中,我想使用自己的WebAssembly模块。
将模块加载到background.html(或popup.html)后,我捕获了编译错误:
CompileError:WebAssembly.compile():嵌入器不允许生成Wasm代码。
Chrome扩展程序不支持wasm模块吗?
Mad*_*ner 10
Chrome专门为应用程序和扩展程序实施了特殊策略“wasm-eval”以解决此问题。它是特定于 chrome 的,但正在慢慢进入CSP和WebAssembly标准。只需在@Xan 的解决方案中替换'unsafe-eval'为'wasm-eval'。
但请注意,这仍然是一个攻击媒介,您有责任验证执行程序集的来源。例如,请参阅uBlock 的作者对此政策的看法。
从此问题看来,Chrome需要script-src: 'unsafe-eval'激活CSP指令才能进行WebAssembly编译。至少在目前情况下,请查看有关为何如此的讨论。
Chrome扩展程序对CSP具有默认限制;其中包括不允许unsafe-eval。有些限制不能解除;在这种情况下,可以unsafe-eval通过添加清单密钥来允许:
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
这足以测试Wasm是否在扩展程序中起作用。但是请注意文档中的警告:
但是,强烈建议您不要这样做。这些功能是臭名昭著的XSS攻击媒介。
unsafe-eval您可以使用文档中的以下方法,对需要扩展的代码进行沙盒化,而不必考虑整个扩展:
要点是在扩展程序中创建一个单独的页面,该页面unsafe-eval允许,但不允许Chrome API访问;然后,您可以将此页面嵌入到扩展程序中,并使用进行通信postMessage()。
| 归档时间: | 
 | 
| 查看次数: | 1455 次 | 
| 最近记录: |