Skip to main content

常见错误

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的相关字段配置,

解决

  1. 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'