Electron应用Content-Security-Policy meta标签unsafe-inline配置不生效
问题根因
- Electron 的 CSP 规则存在优先级差异,主进程
BrowserWindow配置、脚手架打包配置中声明的 CSP 优先级高于 HTML 内的<meta>标签规则。你遇到的报错仍显示初始的default-src 'self' 'unsafe-inline' data:规则,说明你添加的 meta 配置被上层更高优先级的规则覆盖,并未实际生效。 - 谷歌字体除了
https://fonts.googleapis.com的样式资源,还会从https://fonts.gstatic.com加载字体文件,你当前的配置未包含该源,即使 meta 规则生效后续仍会出现加载报错。
修复步骤
- 优先修改最高优先级的 CSP 配置:找到主进程中创建
BrowserWindow的代码,修改webPreferences下的contentSecurityPolicy字段,参考配置如下:
const mainWindow = new BrowserWindow({ // 窗口原有配置保持不变 webPreferences: { // 其他原有配置保持不变,新增/修改以下CSP配置 contentSecurityPolicy: ` default-src 'self' https://cdn.scaleflex.it https://fonts.googleapis.com https://fonts.gstatic.com 'unsafe-eval' 'unsafe-inline' data:; style-src 'self' https://cdn.scaleflex.it https://fonts.googleapis.com 'unsafe-inline'; font-src 'self' https://cdn.scaleflex.it https://fonts.googleapis.com https://fonts.gstatic.com data:; ` } })
- 如果你使用 Electron Forge、Electron Builder 等脚手架打包,检查
package.json中打包配置项里是否有单独声明的 CSP 规则,同步修改为上述内容即可。 - 如果你需要使用 HTML 内的 meta 标签管理 CSP,先删除主进程、打包配置中的所有 CSP 声明,即可让 meta 规则生效,注意同步补充
https://fonts.gstatic.com到配置的相关源中。
内容的提问来源于stack exchange,提问作者Maifee Ul Asad
相关产品推荐
相关产品推荐

