我正在将我的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命令的迷信。人们需要停止对权力的恐惧。
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