学习 Electron - 预加载脚本
Electron 预加载脚本
Electron 主进程是一个拥有完全操作系统访问权限的 Node 环境,除此之外,还能访问 Node 模块及所有通过 npm 安装的包。
出于安全考虑,渲染进程默认运行在页面而非 Node 中。
为将不同类型的进程桥架在一起,需要使用 预加载脚本。
BrowserWindow 的预加载脚本运行在具有 HTML DOM 和 Node、Electron API 的有限子集访问权限环境中。
预加载脚本沙盒化
从 Electron 20 开始,预加载脚本默认沙盒化,不再拥有完整 Node 环境访问权。
仅拥有一个 polyfilled 模块,此模块只能访问有限的 API。
| 可用的 API | 详细信息 |
| ——————— | ——————————————— |
| Electron 模块 | 渲染进程模块 |
| Node.js 模块 | events、timers、url |
| Polyfilled 的全局模块 | Buffer、process、clearImmediate、setImmediate |
预加载脚本需要在渲染器加载页面前注入。如果需要为渲染器添加特殊权限功能,可通过 contentBridge 接口定义全局对象。
// preload.js
const { contextBridge } = require('electron')
contextBridge.exposeInMainWorld('version', {
node: () => process.versions.node,
chrome: () => process.versions.chrome,
electron: () => process.versions.electron
// 除了函数也能暴露变量
})
```js
// main.js
...
const win = new BrowserWindow({
...,
webPreferences: {
preload: path.join(__dirname,'preload.js')
}
})
...
完成之后就可以让渲染器全局访问 versions 了。
可通过 window.versions 或 versions 直接访问。
学习 Electron - 预加载脚本
http://localhost:8080/archives/87ade377-38a3-4200-980e-544089b467f7