ipcMain
从主进程异步地与渲染器进程通信。
进程:主进程
ipcMain
模块是一个 事件发射器。在主进程中使用时,它处理从渲染器进程(网页)发送的异步和同步消息。从渲染器发送的消息将被发射到此模块。
有关使用示例,请查看 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(event, args...)
调用 listener
。
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
与传递给常规事件侦听器的 event
相同。 它包括有关哪个 WebContents 是 invoke 请求的来源的信息。
通过主进程中的 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
的任何处理程序(如果存在)。