Electron的 Unable to load preload script 报错解决方案

一、问题背景

quasar:2.6.0
electron:^22.0.0

运行 quasar 项目时,控制台出现 “Unable to load preload script” 的错误提示,但是程序运行没有丝毫问题,具体如下图所示:
在这里插入图片描述
找到 src-electron/electron-main.js 有这么一段代码:

mainWindow = new BrowserWindow({
	...,
	webPreferences: {
		// 在页面运行其他脚本之前预先加载指定的脚本
		preload: path.resolve(__dirname, process.env.QUASAR_ELECTRON_PRELOAD),
	},
});

该代码的作用是使得process.env.QUASAR_ELECTRON_PRELOAD目录下文件被预加载,再使得这个文件指向的脚本 src-electron/electron-preload.js 被加载,所以推测在预加载的某个过程出现问题

二、尝试解决的方法(若看解决方案可跳过)

  1. 查看process.env.QUASAR_ELECTRON_PRELOAD对应的地址,是否为报错信息的地址
  2. .quasar/electron/electron-preload.js 文件中加载的文件是否指向 src-electron/electron-preload.js
  3. electron-preload.js 文件是否会被预加载(确认webPreferences中preload会被执行)
  4. 搜索 quasar 的 GitHub 仓库,查看到 electron 版本号的 sandbox 会导致报错

三、解决方法

通过设置sandbox: false去开启 preload

mainWindow = new BrowserWindow({
	...,
	webPreferences: {
		sandbox: flase, // 开启沙盒则preload脚本被禁用,所以得设为false
		// 在页面运行其他脚本之前预先加载指定的脚本
		preload: path.resolve(__dirname, process.env.QUASAR_ELECTRON_PRELOAD),
	},
});

解释:
因为在 Electron 22.0.0 版本当中,sandbox 成为了默认选项,在开启了沙盒环境的情况下,preload 脚本默认被禁用(但实际体验还是能用?),因此会出现 “Unable to load preload script” 的报错,得通过设置 sandbox: false 将其禁用

拓展:
在23+版本中,preload 已经成为沙盒 WebContents 默认开启的,所以开启了 sandbox 也无妨

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值