Communicate asynchronously from a renderer process to the main process.
Process: Renderer
The ipcRenderer module is an EventEmitter. It provides a few
methods so you can send synchronous and asynchronous messages from the render
process (web page) to the main process. You can also receive replies from the
main process.
See ipcMain for code examples.
The ipcRenderer module has the following method to listen for events and send messages:
channelStringlistenerFunctioneventIpcRendererEvent...argsany[]
Listens to channel, when a new message arrives listener would be called with
listener(event, args...).
channelStringlistenerFunctioneventIpcRendererEvent...argsany[]
Adds a one time listener function for the event. This listener is invoked
only the next time a message is sent to channel, after which it is removed.
channelStringlistenerFunction...argsany[]
Removes the specified listener from the listener array for the specified
channel.
channelString
Removes all listeners, or those of the specified channel.
channelString...argsany[]
Send an asynchronous message to the main process via channel, along with
arguments. Arguments will be serialized with the Structured Clone
Algorithm, just like postMessage, so prototype chains will not be
included. Sending Functions, Promises, Symbols, WeakMaps, or WeakSets will
throw an exception.
NOTE: Sending non-standard JavaScript types such as DOM objects or special Electron objects is deprecated, and will begin throwing an exception starting with Electron 9.
The main process handles it by listening for channel with the
ipcMain module.
channelString...argsany[]
Returns Promise<any> - Resolves with the response from the main process.
Send a message to the main process via channel and expect a result
asynchronously. Arguments will be serialized with the Structured Clone
Algorithm, just like postMessage, so prototype chains will not be
included. Sending Functions, Promises, Symbols, WeakMaps, or WeakSets will
throw an exception.
NOTE: Sending non-standard JavaScript types such as DOM objects or special Electron objects is deprecated, and will begin throwing an exception starting with Electron 9.
The main process should listen for channel with
ipcMain.handle().
For example:
// Renderer process
ipcRenderer.invoke('some-name', someArgument).then((result) => {
// ...
})
// Main process
ipcMain.handle('some-name', async (event, someArgument) => {
const result = await doSomeWork(someArgument)
return result
})channelString...argsany[]
Returns any - The value sent back by the ipcMain handler.
Send a message to the main process via channel and expect a result
synchronously. Arguments will be serialized with the Structured Clone
Algorithm, just like postMessage, so prototype chains will not be
included. Sending Functions, Promises, Symbols, WeakMaps, or WeakSets will
throw an exception.
NOTE: Sending non-standard JavaScript types such as DOM objects or special Electron objects is deprecated, and will begin throwing an exception starting with Electron 9.
The main process handles it by listening for channel with ipcMain module,
and replies by setting event.returnValue.
⚠️ WARNING: Sending a synchronous message will block the whole renderer process until the reply is received, so use this method only as a last resort. It's much better to use the asynchronous version,invoke().
webContentsIdNumberchannelString...argsany[]
Sends a message to a window with webContentsId via channel.
channelString...argsany[]
Like ipcRenderer.send but the event will be sent to the <webview> element in
the host page instead of the main process.
The documentation for the event object passed to the callback can be found
in the ipc-renderer-event structure docs.