参考源码:
报错:
原因:
修改为:
contextIsolation: false,
对上下文隔离理解不清,点击查看API
学习笔记:
上下文隔离确保预加载脚本和Electron内部逻辑运行所在的webcontent网页之外的另一个独立上下文环境里。预加载脚本访问window对象并不是网站所能访问的对象。自Electron12以来,默认开启上下文隔离,并且它是所有应用推荐的安全设置。
上下文隔离禁用时,渲染进程中,预加载脚本暴露给已加载页面API是常见的使用方式。
preload.js
window.myAPI = {doAThing: ()=>{}}
renderer.js
window.myAPI.doAThing()
上下文隔离启用时,Electron提供contextBridge模块用来安全地从独立运行、上下文隔离的预加载中暴露API给正在运行的渲染进程。
preload.js
const {contextBridge} = require(‘electron’)
contextBrige.exposeInMainWorld(‘myAPI’,{
doAThing:()=>{}})
renderer.js
window.myAPI.doAthing()
注意安全事项:开启contextIsolation后,contextBridge中直接暴露没有任何参数过滤的高等级权限API不安全,正确方法是为每一种通信消息提供一种实现方法。
错误例子:
contextBridge.exposeInMainWorld(‘myAPI’,{
send:ipcRenderer.send
})
正确例子:
contextBridge.exposeInMainWorld(‘myAPI’,{
loadPreferences:()=> ipcRenderer.invoke(‘load-prefs’)
})