ipcMain
从主进程到渲染器进程的异步通信。
进程:主
此 ipcMain
模块是一个 Event Emitter。当在主进程中使用时,它处理从渲染器进程(网页)发送的异步和同步消息。从渲染器发送的消息将发射到此模块。
有关用法示例,请参阅 IPC 教程。
发送消息
也可以从主进程向渲染器进程发送消息,请参阅 webContents.send 了解更多信息。
- 发送消息时,事件名称为
channel
。 - 要回复同步消息,您需要设置
event.returnValue
。 - 要将异步消息发送回发送方,您可以使用
event.reply(...)
。此辅助方法将自动处理来自非主帧(例如 iframe)的消息,而event.sender.send(...)
将始终发送到主帧。
方法
此 ipcMain
模块具有以下监听事件的方法
ipcMain.on(channel, listener)
channel
字符串listener
函数event
IpcMainEvent...args
any[]
监听 channel
,当新消息到达时,listener
将被调用,并带有 listener(event, args...)
。
ipcMain.off(channel, listener)
channel
字符串listener
函数event
IpcMainEvent...args
any[]
从指定 channel
的监听器数组中移除指定的 listener
。
ipcMain.once(channel, listener)
channel
字符串listener
函数event
IpcMainEvent...args
any[]
为事件添加一个一次性 listener
函数。此 listener
只会在下次有消息发送到 channel
时被调用,之后就会被移除。
ipcMain.addListener(channel, listener)
channel
字符串listener
函数event
IpcMainEvent...args
any[]
是 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>event
IpcMainInvokeEvent...args
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>event
IpcMainInvokeEvent...args
any[]
处理单个可 invoke
的 IPC 消息,然后移除监听器。请参阅 ipcMain.handle(channel, listener)
。
ipcMain.removeHandler(channel)
channel
字符串
移除 channel
的任何处理程序(如果存在)。