安全性
早期的electron允许直接让渲染进程可以访问主进程,有用完整的nodejs和Electron环境。
index.html
为了安全性考虑,从 Electron 20 开始,渲染进程默认启用了沙盒,这导致你无法在方便的使用上述模式。可渲染进程和主进程是需要沟通,这怎么做到呢?
进程安全沟通
新模式下,为了让渲染进程能与主进程通信能够顺利沟通交互,electron提出了 预渲染脚本/预执行脚本/预脚本的 概念。
main.js
预脚本与渲染进程
预脚本最终会被插入到主窗口(页面)中执行,也就是说它最终会执行在浏览器,那它拥有访问渲染进程环境的能力
preload.js
预脚本与主进程
为了让渲染进程能与主进程通信,预脚本可以使用node和Electron部分模块,通过我们自定义的伪require实现(一切为了安全)
为了方便使用,我们把Node基础对象也填充到了预脚本的全局上下文中
preload.js
如果你擅自越权访问其它模块 则会提示报错
preload.js
预脚本的核心功能
预脚本里提供了一个contextBridge对象,该对象是 主进程与渲染进程的 连接桥梁。
可以通过它向渲染进程里注入你所需要的内容,而后客户端便可以通过window[apiKey]访问。
preload.js
index.html
后期预脚本 再结合ICP(进程间通讯),就可以顺利解决主进程与渲染进程的通信。
依然使用不安全模式
如果你还想使用旧版的方式 直接在渲染进程使用完整的node环境,直接和主进程交互,那你可以这么做
main.js
Tip
官方文档说 关闭沙盒模式sandbox: false即可使用不安全模式,实测不行