跳至主要内容

ipcMain

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

进程:主进程

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

有关使用示例,请查看 IPC 教程

发送消息

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

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

方法

ipcMain 模块具有以下方法来侦听事件

ipcMain.on(channel, listener)

  • channel 字符串
  • listener 函数

侦听channel,当收到新消息时,将使用listener(event, args...)调用listener

ipcMain.once(channel, listener)

  • channel 字符串
  • listener 函数

为事件添加一次性listener函数。此listener仅在下次将消息发送到channel时调用,之后将其删除。

ipcMain.removeListener(channel, listener)

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

从指定channel的侦听器数组中删除指定的listener

ipcMain.removeAllListeners([channel])

  • channel 字符串(可选)

删除指定channel的侦听器。

ipcMain.handle(channel, listener)

  • channel 字符串
  • listener Function<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 是 invoke 请求源的信息。

在主进程中通过handle抛出的错误不是透明的,因为它们被序列化,并且仅将原始错误中的message属性提供给渲染器进程。有关详细信息,请参阅 #24427

ipcMain.handleOnce(channel, listener)

  • channel 字符串
  • listener Function<Promise<any> | any>

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

ipcMain.removeHandler(channel)

  • channel 字符串

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