跳到主要内容

进程间通信

进程间通信(IPC)是渲染进程使用原生能力的通道。主进程和渲染进程职责不同,打开文件对话框、从菜单改页面内容,都要通过消息完成。

官方教程把常见方向分成三类。

渲染进程到主进程,不等待结果​

ipcRenderer.send 发消息,ipcMain.on 接收。适合日志和一次性通知。

ipcRenderer.send('log:info', '按钮被点击');
ipcMain.on('log:info', (_event, text) => {
console.log(text);
});

渲染进程到主进程,需要结果​

ipcRenderer.invoke 返回 Promise,ipcMain.handle 的返回值就是这个 Promise 的结果。适合对话框、查询配置。

同一个频道只能有一个 handle。再次注册会抛错。

主进程到渲染进程​

主进程要指明哪一个页面接收,通过该页面的 webContents.send 发送。渲染进程用 ipcRenderer.on 监听。官方说明:这个方向没有和 invoke 对等的内置请求接口;需要回执时,在监听器里再发一条消息。

ipcRenderer.sendSync 会停住渲染进程直到主进程写入 event.returnValue。新代码使用 invoke。

消息里能放什么​

参数和返回值按结构化克隆传递。可以传普通对象、数组、ArrayBuffer。函数、DOM 节点和带方法的类实例不能作为数据传递。contextBridge 暴露的函数是代理,不是把函数克隆过去。

相关文档​