Chrome扩展Manifest V3版本中如何允许使用eval函数?
Manifest V3 允许unsafe-eval的正确配置方案
Manifest V3对内容安全策略(CSP)的配置规则做了结构性调整,你之前尝试的配置结构不符合V3规范,一级键应为上下文类型而非CSP指令,因此无法生效。
优先方案:移除eval依赖
Chrome官方明确不推荐在扩展中使用eval类动态执行逻辑,优先重构代码替换eval:
- 固定逻辑的动态执行可以替换为预置的函数分支
- 必须动态生成逻辑的场景,优先使用模板字符串+预置函数的形式实现,避免执行任意字符串
临时方案:全局配置CSP开启unsafe-eval
如果确实无法移除eval依赖,按照如下格式修改manifest.json的CSP配置:
"content_security_policy": { "extension_pages": "script-src 'self' 'unsafe-eval'; object-src 'self'", "content_scripts": "script-src 'self' 'unsafe-eval'; object-src 'self'" }
注意事项:
- 该配置仅在Chrome 103及以上版本生效,更低版本Chrome完全禁止Manifest V3扩展使用unsafe-eval,必须重构代码适配
- 配置后扩展上架Chrome应用商店时会被严格审核,需要提供使用eval的合理必要性证明,无合理理由会被拒审
更安全的替代方案:沙箱独立执行
如果需要执行不可信的动态代码,建议使用扩展沙箱能力,既满足执行需求,也不需要给扩展全局开启unsafe-eval权限,更容易通过应用商店审核:
- 在manifest.json中添加沙箱配置:
"content_security_policy": { "sandbox": "sandbox allow-scripts; script-src 'unsafe-eval'" }, "sandbox": { "pages": ["sandbox.html"] }
- 创建沙箱页面
sandbox.html,在页面内部实现eval执行逻辑,通过postMessage和扩展主上下文/内容脚本通信,传递待执行内容和执行结果。
内容的提问来源于stack exchange,提问作者Jeanluca Scaljeri
相关产品推荐
相关产品推荐

