常见错误
Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: xxxxxxxx
原因
这个错误是由于网页中设置了 Content Security Policy (CSP),而其中包含了不允许使用 'unsafe-eval' 的脚本来源(script-src 'self' 'unsafe-inline')。'unsafe-eval' 指的是不安全的 JavaScript 代码执行,它是 CSP 中的一个指令,用于防止通过动态生成的代码来执行恶意操作。
而当前Electron的SCP安全配置中并没有明确允许可以执行unsafe-eval
的相关字段配置,
解决
- 在
index.html
的<head>
中添加<meta>
标签,允许这个字段
<!-- 添加 'unsafe-inline' 前-->
<meta http-equiv="Content-Security-Policy"
content="default-src 'self' 'unsafe-inline'" />
<!-- 添加 'unsafe-inline' 后-->
<meta http-equiv="Content-Security-Policy"
content="script-src 'self' 'unsafe-inline' 'unsafe-eval'" />
<!-- 允许所有-->
<meta http-equiv="Content-Security-Policy"
content="default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline';">
解析
字段作用:
default-src:当没有显示的为资源配置生效范围,默认使用default-src的值作为生效范围。
script-src,表示资源类型为脚本文件(以下取值表示不同的来源)
- self 表示允许脚本来源于当前网站(当前域名,例如:https://www.csdn.net/,脚本文件路径的前缀和所在的html文件一致)
- unsafe-inline 表示允许脚本来源于
<script></script>
标签对 - unsafe-eval 表示允许脚本来源于字符串,如果不配置本字段以下方法将被阻塞,并且不会产生任何影响:
- eval()
- Function() When passing a string literal like to methods like: window.setTimeout(“alert(“Hello World!”);”, 500);
- setTimeout()
- setInterval()
- window.setImmediate
- window.execScript() Non-Standard (IE < 11 only)
还有样式等各种各样的资源,在文章不是重点,感兴趣可以通过“资源类型”查看
参考文献
Electron Security Warning (Disabled webSecurity)
原因
解决
// 主进程中添加
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'