跳到主要内容

ipcMain

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

进程:

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

有关用法示例,请参阅 IPC 教程

发送消息

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

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

方法

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

ipcMain.on(channel, listener)

  • channel 字符串
  • listener 函数

监听 channel,当新消息到达时,listener 将被调用,并带有 listener(event, args...)

ipcMain.off(channel, listener)

  • channel 字符串
  • listener 函数

从指定 channel 的监听器数组中移除指定的 listener

ipcMain.once(channel, listener)

  • channel 字符串
  • listener 函数

为事件添加一个一次性 listener 函数。此 listener 只会在下次有消息发送到 channel 时被调用,之后就会被移除。

ipcMain.addListener(channel, listener)

  • channel 字符串
  • listener 函数

ipcMain.on 的别名。

ipcMain.removeListener(channel, listener)

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

ipcMain.off 的别名。

ipcMain.removeAllListeners([channel])

  • channel 字符串 (可选)

移除指定 channel 的所有监听器。如果未指定通道,则移除所有通道的所有监听器。

ipcMain.handle(channel, listener)

  • channel 字符串
  • listener 函数<Promise<any> | any>

为可 invoke 的 IPC 添加一个处理程序。此处理程序将在渲染器调用 ipcRenderer.invoke(channel, ...args) 时被调用。

如果 listener 返回一个 Promise,则该 Promise 的最终结果将作为对远程调用者的回复返回。否则,监听器的返回值将用作回复的值。

主进程
ipcMain.handle('my-invokable-ipc', async (event, ...args) => {
const result = await somePromise(...args)
return result
})
渲染器进程
async () => {
const result = await ipcRenderer.invoke('my-invokable-ipc', arg1, arg2)
// ...
}

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

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

ipcMain.handleOnce(channel, listener)

  • channel 字符串
  • listener 函数<Promise<any> | any>

处理单个可 invoke 的 IPC 消息,然后移除监听器。请参阅 ipcMain.handle(channel, listener)

ipcMain.removeHandler(channel)

  • channel 字符串

移除 channel 的任何处理程序(如果存在)。