ipcRenderer
进程: Renderer
ipcRenderer
是一个 的实例。 你可以使用它提供的一些方法从渲染进程 (web 页面) 发送同步或异步的消息到主进程。 也可以接收主进程回复的消息。
请参阅 进程间通信(IPC)教程 获取代码示例。
ipcRenderer
模块使用以下方法来监听事件和发送消息。
channel
stringlistener
Functionevent
IpcRendererEvent
监听 channel, 当新消息到达,将通过 listener(event, args…) 调用 listener。
ipcRenderer.once(channel, listener)
channel
stringlistener
Functionevent
IpcRendererEvent...args
any[]
添加一次性 listener
函数。 这个 listener
只会在 channel
下一次收到消息的时候被调用,之后这个监听器会被移除。
ipcRenderer.removeListener(channel, listener)
channel
stringlistener
Function...args
any[]
为特定的 channel 从监听队列中删除特定的 listener 监听者.
- string
移除所有的监听器,当指定 channel
时只移除与其相关的所有监听器。
ipcRenderer.send(channel, ...args)
channel
string...args
any[]
通过channel
向主进程发送异步消息,可以发送任意参数。 参数将使用 进行序列化,就像 window.postMessage,因此原型链将不会包含在内。 发送 Functions, Promises, Symbols, WeakMaps, 或 WeakSets 将抛出异常
如果需要将一个 传输到主进程,请使用 ipcRenderer.postMessage。
如果你想从主进程中收到单个响应,比如一个方法调用的结果, 请考虑使用
ipcRenderer.invoke(channel, ...args)
channel
string...args
any[]
Returns Promise<any>
- Resolves 主进程返回值
通过 channel
向主过程发送消息,并异步等待结果。 参数将使用 进行序列化,就像 window.postMessage,因此原型链将不会包含在内。 发送 Functions, Promises, Symbols, WeakMaps, 或 WeakSets 将抛出异常
主进程应该使用 监听 channel
例如:
如果需要将一个 MessagePort 传输到主进程,请使用 。
如果你不需要回复此消息,请考虑使用 ipcRender.send。
channel
string...args
any[]
通过 channel
向主过程发送消息,并同步等待结果。 参数将使用 Structured Clone Algorithm进行序列化,就像 ,因此原型链将不会包含在内。 发送 Functions, Promises, Symbols, WeakMaps, 或 WeakSets 将抛出异常
主进程可以使用 ipcMain
监听 channel来接收这些消息,并通过 设置回复消息。
ipcRenderer.postMessage(channel, message, [transfer])
channel
stringtransfer
MessagePort[] (optional)
发送消息到主进程,同时可以选择性发送零到多个 MessagePort 对象
从渲染进程发送到主进程的MessagePort
对象可作为对象访问触发事件的ports
端口属性
例如:
// 渲染进程
const { port1, port2 } = new MessageChannel()
ipcRenderer.postMessage('port', { message: 'hello' }, [port1])
// 主进程
ipcMain.on('port', (e, msg) => {
const [port] = e.ports
// ...
})
更多关于如何使用 MessagePort
和 MessageChannel
的信息详见 MDN documentation
ipcRenderer.sendTo(webContentsId, channel, ...args)
webContentsId
numberchannel
string...args
any[]
通过 channel
发送消息到带有 webContentsId
的窗口.
channel
string...args
any[]
就像 ipcRenderer.send
,不同的是消息会被发送到 host 页面上的 <webview>
元素,而不是主进程。