Chrome扩展兼容Firefox遇EvalError:CSP阻止eval()调用
Firefox Manifest V3 适配时 eval 被CSP拦截的解决方案
- Firefox 对 Manifest V3 扩展的
extension_pagesCSP 规则有严格限制,unsafe-eval在此范围内是不被允许的——哪怕你显式声明也会被浏览器忽略,这是区别于 Chrome 的核心差异。 - 不要尝试用
Function构造函数替代 eval,Firefox 会将其归为同一类风险操作,同样会被拦截。 - 可行方案1:使用沙箱脚本处理eval逻辑
- 在 manifest.json 中添加沙箱配置:
"sandbox": { "pages": ["sandbox.html"], "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'none'" } - 创建
sandbox.html页面,将需要 eval 的逻辑放在这个页面中,通过postMessage与扩展的其他页面进行数据交互,传递执行结果。
- 在 manifest.json 中添加沙箱配置:
- 可行方案2:重构代码彻底避免eval
梳理使用 eval 的场景,将动态执行字符串的逻辑替换为静态代码实现。比如把动态函数调用改成预先定义的函数映射、属性访问等方式,从根源上规避CSP限制。 - 确保使用最新版本的 Firefox(至少109版本以上),旧版本对 Manifest V3 的CSP支持存在兼容性问题。
内容的提问来源于stack exchange,提问作者Ujjaval Vaihnav
相关产品推荐
相关产品推荐

