之前参与了一个使用Electron框架编写软件的项目,当时为了兼容win 7版本选择了使用Electron 8。现在负责人要求我们将Electron升级到能兼容到win 7的最高版本,也就是Electron 22。[Electron官方文档为](再见,Windows 7/8/8.1 | Electron (electronjs.org))。
由于我们项目是使用yarn来进行包管理,所以我们直接使用yarn add electron@22.0.0:
即可将Electron的版本升级到22.0.0。成功显示:
我们还可以在项目根目录的package.json文件中找electron的版本来判断是否升级成功。
当然我们这样只升级electron的版本肯定是会遇到问题的。果不其然,我运行项目后,原本有内容的项目现在变成了白屏,并且报错。
不过既然已经有了报错信息,我们也就能对症下药了。通过在网络上搜索相关报错信息,以及在Electron官方文档中的查找,发现问题就来自Electron。
由于require可以直接请求运行客户机上的文件,容易引起安全问题,而在Electron 12以后的版本中被禁止。Electron官方文档原文如下:上下文隔离功能将确保您的 预加载脚本 和Electron的内部逻辑 运行在所加载的webcontent网页 之外的另一个独立的上下文环境里。 这对安全性很重要,因为它有助于阻止网站访问Electron的内部组件 和 您的预加载脚本可访问的高等级权限的API 。
这意味着,实际上,您的预加载脚本访问的window对象并不是网站所能访问的对象。例如,如果您在预加载脚本中设置window.hello = 'wave'并且启用了上下文隔离,当网站尝试访问window.hello对象时将返回undefined。自Electron 12以来,默认情况下已启用上下文隔离,并且它是 所有应用程序推荐的安全设置。文档位置为:上下文隔离 | Electron (electronjs.org)
OK,通过Electron里的文章我们也就知道了只要在BrowserWindow中添加contextIsolation: false即可解决这个问题,那我们来试试吧。
nice,问题成功得到了解决。这次的项目不管是编写代码,还是升级框架都是一次很好的学习过程,在此记录一下,希望能有所帮助!