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

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 的,但正在慢慢进入CSPWebAssembly标准。只需在@Xan 的解决方案中替换'unsafe-eval''wasm-eval'

但请注意,这仍然是一个攻击媒介,您有责任验证执行程序集的来源。例如,请参阅uBlock 的作者对此政策的看法


Xan*_*Xan 5

从此问题看来,Chrome需要script-src: 'unsafe-eval'激活CSP指令才能进行WebAssembly编译。至少在目前情况下,请查看有关为何如此的讨论

Chrome扩展程序对CSP具有默认限制;其中包括不允许unsafe-eval。有些限制不能解除;在这种情况下,可以unsafe-eval通过添加清单密钥允许:

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
Run Code Online (Sandbox Code Playgroud)

这足以测试Wasm是否在扩展程序中起作用。但是请注意文档中的警告:

但是,强烈建议您不要这样做。这些功能是臭名昭著的XSS攻击媒介。

unsafe-eval您可以使用文档中的以下方法,对需要扩展的代码进行沙盒化,而不必考虑整个扩展:

在Chrome扩展程序中使用eval。安全地

要点是在扩展程序中创建一个单独的页面,该页面unsafe-eval允许,但不允许Chrome API访问;然后,您可以将此页面嵌入到扩展程序中,并使用进行通信postMessage()

  • Chrome浏览器[已实施特殊政策'wasm-eval'](https://bugs.chromium.org/p/v8/issues/detail?id=7041)专用于解决此问题的扩展程序。 (2认同)
  • “wasm-unsafe-eval”可以与 Manifest V3 一起使用。 (2认同)