You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Manifest V3版Chrome扩展沙箱中运行WebAssembly出现编译错误如何解决

问题描述

我正在尝试让一个包含WebAssembly的库在Manifest V3版本的Chrome扩展中运行,相关配置和遇到的问题如下:

  • 我准备了名为sandbox.html的基础文件,其中执行如下JavaScript代码:
if (typeof WebAssembly === "object" && typeof WebAssembly.instantiate === "function") {
    const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));
}
  • 我通过以下标签将该页面嵌入到父页面中:
<iframe
    sandbox="allow-same-origin allow-scripts" 
    csp="script-src 'self' 'unsafe-eval'; object-src 'self'" src="sandbox.html">
</iframe>
  • 因为需要使用allow-same-origin权限,我没有在manifest.json中添加sandbox或content_security_policy配置
  • 运行时触发如下报错:
Uncaught CompileError: WebAssembly.Module(): Wasm code generation disallowed by embedder
  • 已尝试的操作均无法解决问题:
    • 用wasm-eval替代unsafe-eval
    • 在manifest.json中配置不含allow-same-origin的content_security_policy,同时不配置sandbox字段
解决方案

你遇到的问题核心是Chrome扩展Manifest V3的默认内容安全策略(CSP)优先级高于iframe上的csp属性,默认禁止所有动态代码生成包括WebAssembly,iframe上的csp属性只能新增限制,无法放宽扩展层面的CSP规则,你需要补全以下配置:

  1. 在manifest.json中新增扩展级的content_security_policy配置,放开WebAssembly执行权限:
{
  "manifest_version": 3,
  // 其他扩展配置保持不变
  "content_security_policy": {
    "extension_pages": "script-src 'self' 'unsafe-eval' 'wasm-eval'; object-src 'self'"
  }
}
  1. 如果你不需要使用普通的eval能力,只需要WebAssembly运行权限,可以删除配置中的'unsafe-eval',仅保留'wasm-eval'即可获得更高的安全性,该配置在Chrome 103及以上版本均支持。
  2. 不需要修改你现有的iframe配置,也不需要在manifest.json中新增sandbox字段,可以保留allow-same-origin权限满足你的业务需求。

内容的提问来源于stack exchange,提问作者Bentley Carr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:57:00