javascript - Chrome 扩展程序中的 Wasm 模块编译错误

标签 javascript google-chrome-extension webassembly

在我的扩展中,我想使用我自己的 WebAssembly 模块。

加载我的模块后(到 background.htmlpopup.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/

相关文章:

javascript - 函数在我的代码中不起作用

javascript - Chrome 内容脚本未在大约 :blank page 中加载

javascript - Chrome 扩展替换文本

google-chrome - "Getting started with Greasemonkey"教程的建议

c++ - emscripten 中的错误绑定(bind)属性和函数

javascript - react-loadable - 对象作为 React 子对象无效

javascript - Canvas 像素化 - 调整像素大小

javascript - 过滤 JSON 中的一个特定节点,显示直接父节点和所有子节点

webassembly - Blazor 表单提交需要两次单击才能刷新 View

javascript - 解码 .wasm WebAssembly 文件