在我的扩展中,我想使用我自己的 WebAssembly 模块。
加载我的模块后(到 background.html
或 popup.html
),我发现了编译错误:
CompileError: WebAssembly.compile(): Wasm code generation disallowed by embedder.
Chrome 扩展是否不支持 wasm 模块?
最佳答案
似乎来自this issue Chrome 需要 script-src: 'unsafe-eval'
CSP 指令对 WebAssembly 编译有效。参见 this discussion至于为什么会这样,至少目前是这样。
Chrome 扩展随附 default restrictions on CSP ;这包括不允许 unsafe-eval
。有些限制不能取消;在这种情况下,您可以通过添加 list key 来允许unsafe-eval
:
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
这应该足以测试 Wasm 是否在扩展中工作。但请注意文档中的警告:
However, we strongly recommend against doing this. These functions are notorious XSS attack vectors.
不是允许unsafe-eval
用于您的整个扩展,您可以使用文档中的以下方法对需要它的代码进行沙盒处理:
Using eval in Chrome Extensions. Safely.
其要点是在您的扩展程序中创建一个单独的页面,其中允许 unsafe-eval
但不允许访问 Chrome API;然后您将此页面嵌入您的扩展程序并使用 postMessage()
与其通信.
关于javascript - Chrome 扩展程序中的 Wasm 模块编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48523118/