ipcMain
从主进程与渲染器进程进行异步通信。
进程:主进程
ipcMain 模块是一个 事件发射器。在主进程中使用时,它会处理从渲染器进程(网页)发送过来的异步和同步消息。从渲染器发送的消息将被发射到该模块。
有关用法示例,请查看 IPC 教程。
发送消息
也可以从主进程向渲染器进程发送消息,有关更多信息,请参阅 webContents.send。
- 发送消息时,事件名称就是
channel。 - 要回复同步消息,你需要设置
event.returnValue。 - 要将异步消息发回给发送者,你可以使用
event.reply(...)。这个辅助方法会自动处理来自非主框架(例如 iframe)的消息,而event.sender.send(...)则总是发送到主框架。
方法
ipcMain 模块提供了以下方法来监听事件
ipcMain.on(channel, listener)
channelstringlistenerFunctioneventIpcMainEvent...argsany[]
监听 channel,当新消息到达时,将调用 listener(event, args...)。
ipcMain.off(channel, listener)
channelstringlistenerFunctioneventIpcMainEvent...argsany[]
从指定 channel 的监听器数组中移除指定的 listener。
ipcMain.once(channel, listener)
channelstringlistenerFunctioneventIpcMainEvent...argsany[]
为事件添加一次性 listener 函数。此 listener 仅在下次向 channel 发送消息时调用,之后将被移除。
ipcMain.addListener(channel, listener)
channelstringlistenerFunctioneventIpcMainEvent...argsany[]
ipcMain.on 的别名。
ipcMain.removeListener(channel, listener)
channelstringlistenerFunction...argsany[]
ipcMain.off 的别名。
ipcMain.removeAllListeners([channel])
channelstring (可选)
移除指定 channel 的所有监听器。如果未指定 channel,则移除所有 channel 的所有监听器。
ipcMain.handle(channel, listener)
channelstringlistenerFunction<Promise<any> | any>eventIpcMainInvokeEvent...argsany[]
为可 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)
channelstringlistenerFunction<Promise<any> | any>eventIpcMainInvokeEvent...argsany[]
处理单个 invokeable IPC 消息,然后移除监听器。请参阅 ipcMain.handle(channel, listener)。
ipcMain.removeHandler(channel)
channelstring
移除 channel 的任何处理程序(如果存在)。