学习 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
作者
inksha
发布于
2024年09月14日
许可协议