Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Con
微wx笑 2023-02-11【前端开发】 0 0关键字: eval
谷歌扩展插件中使用 eval 将 ajax 返回的数据转换为对象时,遇到错误:Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is no
谷歌扩展插件中使用 eval 将 ajax 返回的数据转换为对象时,遇到错误:Uncaught 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' 'wasm-unsafe-eval'"
unsafe-eval:
‘unsafe-inline’和‘unsafe-eval’表达式重新启用内联JavaScript和动态代码执行,这些默认情况下都是被CSP禁用的。理想情况下,通常不会希望在策略里保留这些表达式,但没有它们大多数现有的应用都会被阻断。
尝试解决方案:
//Manifest v2 "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'" //Manifest v3 "content_security_policy": { "extension_pages": "script-src 'self' 'unsafe-eval'; object-src 'self'", }
添加unsafe-eval标实,但是插件会给我们抛错:
'content_security_policy.extension_pages': Insecure CSP value "'unsafe-eval'" in directive 'script-src'.
'content_security_policy.extension_pages':指令'script-src'中的不安全CSP值“'unsafe-eval'”。
官方解释
实际上,Chrome扩展不允许使用unsafe-eval或eval 。
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_Security_Policy
在制作Chrome扩展程序时,请注意它受到内容安全策略的严格限制。 确保您阅读并理解WebExtensions内容安全策略。 如果你想有一个内联脚本,如:
<script>
alert('hello')
</script>
您必须将脚本标记内容计算到其SHA256值中,并将其添加到您的清单中,以便允许执行它。
A chrome extension is not allowed to use unsafe-eval, or eval at all in fact.
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_Security_Policy
When making a Chrome extension understand that it's severely limited by Content Security Policies. Make sure you read and understand the WebExtensions Content Security Policy. If you want to have an inline script like:
<script>
alert('hello')
</script>
You're gonna have to calculate the script tags contents into its SHA256 value and add that to your manifest in order for it to be allowed to be executed.
如果是自己的网站,可以尝试通过 mata 标签来解决,未经验证:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
参考:https://blog.csdn.net/gao_zhennan/article/details/126006827
我的是Chrome扩展,等于是自己的代码运行在别人的网站上,肯定是不行了。
所以只能使用 JSON.parse 了,
如果你是希望通过 eval 将js代码转换为对象的话,需要别想办法了。
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/front/2023-02-11/1713.html