跳转至

ipcMain

从主进程异步通信到渲染进程。

进程:Main

ipcMain 模块是一个 Event Emitter。在主进程中使用时,它处理从渲染进程(网页)发送的异步和同步消息。从渲染进程发送的消息会在此模块上发出。

有关使用示例,请参阅 IPC tutorial。

发送消息

也可以从主进程向渲染进程发送消息,更多信息请参阅 webContents.send。

  • 发送消息时,事件名称即为 channel。
  • 要回复同步消息,需要设置 event.returnValue。
  • 要向发送方回发异步消息,可以使用 event.reply(...)。此辅助方法会自动处理来自非主框架(例如 iframe)的消息,而 event.sender.send(...) 始终发送到主框架。

方法

ipcMain 模块具有以下用于监听事件的方法:

ipcMain.on(channel, listener)

  • channel 字符串
  • listener 函数
  • event IpcMainEvent
  • ...args any[]

监听 channel,当有新消息到达时,会以 listener(event, args...) 的形式调用 listener。

ipcMain.off(channel, listener)

  • channel 字符串
  • listener 函数\<Promise\<any> | any>
  • event IpcMainInvokeEvent
  • ...args any[]

为可 invoke 的 IPC 添加处理程序。每当渲染进程调用 ipcRenderer.invoke(channel, ...args) 时,都会调用此处理程序。

如果 listener 返回 Promise,则 Promise 的最终结果将作为回复返回给远程调用方。否则,监听器的返回值将用作回复的值。

```js title='Main Process' @ts-type={somePromise:(...args:unknown[])=>Promise} ipcMain.handle('my-invokable-ipc', async (event, ...args) => { const result = await somePromise(...args) return result })

```js title='Renderer Process' @ts-type={arg1:unknown} @ts-type={arg2:unknown}
async () => {
  const result = await ipcRenderer.invoke('my-invokable-ipc', arg1, arg2)
  // ...
}

作为第一个参数传递给处理程序的 event 与传递给常规事件监听器的 event 相同。它包含有关哪个 WebContents 是 invoke 请求来源的信息。

在主进程中通过 handle 抛出的错误不会透明传递,因为它们会被序列化,并且只会将原始错误的 message 属性提供给渲染进程。详情请参阅 #24427。

ipcMain.handleOnce(channel, listener)

  • channel 字符串

如果存在,则移除 channel 的任何处理程序。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron