跳到主要内容

预加载脚本

预加载脚本(preload)在渲染进程创建之后、页面自己的脚本执行之前运行。路径写在 webPreferences.preload 上,并且要是绝对路径。

const win = new BrowserWindow({
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
contextIsolation: true,
nodeIntegration: false,
sandbox: true,
},
});

它能做什么​

预加载脚本和页面共享同一份 DOM,但在上下文隔离打开时,两边的 window 不是同一个对象。预加载脚本可以把桌面能力收成少数函数,再交给页面:

const { contextBridge, ipcRenderer } = require('electron');

contextBridge.exposeInMainWorld('api', {
getVersion: () => ipcRenderer.invoke('app:version'),
});

页面里随后可以调用 window.api.getVersion()。频道名留在预加载脚本里,页面只看见业务函数。

沙箱对它的影响​

sandbox: true 时,预加载脚本里的 require 只能用有限模块,常见的是 electron 里的 ipcRenderer、contextBridge、webFrame。读文件放在主进程,预加载脚本只负责转发。

官方还说明:Node 集成打开时,沙箱会自动关掉。预加载脚本需要的 Node 能力,优先改成一次 IPC,而不是关掉沙箱。

相关文档​