如何在chrome扩展版本3中允许eval



我正在将我的chrome扩展升级到清单版本3。但是,我的扩展在其内容脚本中使用了eval。在版本3中,我得到以下错误

Error in event handler: EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self'".

我能够在版本2中修复这个问题,如下所示:

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

但这已经改变了,我尝试了很多

"content_security_policy": {
"script-src": "self unsafe-eval",
"unsafe-eval": "object-src self",
"unsafe-inline": "self"
}

我不确定这里到底有什么可能,所以任何帮助都将不胜感激

看看是否可以通过Function( "return "+ toBeEvaluated )()构造函数绕过它;如果这也被列入黑名单,看看他们是否把setTimeout( toBeEvaluated, 1 )排除在外。这也可以起到替代作用。

但这种解决方案无济于事——我们需要从根源上解决问题。需要修复围绕eval命令的迷信。人们需要停止对权力的恐惧。

Manifest v3中不支持使用eval或任何其他方式(如new Function(从字符串中执行代码。这违反了他们最新的政策。清单V3不允许执行任意代码。

参考:https://developer.chrome.com/docs/extensions/mv3/intro/mv3-migration/#remotely-托管代码

然而,谷歌的一位发言人证实,他们计划在Manifest V2弃用之前,支持Manifest V3中的用户脚本管理器(取决于任意代码执行(。最有可能的最终用户需要启用一些设置,以便允许扩展运行任意代码。

参考:https://github.com/Tampermonkey/tampermonkey/issues/644#issuecomment-1140110430