Перейти к основному содержанию

ipcRenderer

History

Асинхронное взаимодействие между процессом визуализации и основным процессом.

Процесс: Графический

Модуль ipcRenderer представляет собой EventEmitter. Он предоставляет несколько методов, чтобы вы могли отправлять синхронные и асинхронные сообщения из процесса визуализации (веб-страницы) в основной процесс. Вы также можете получать ответы от главного процесса.

See IPC tutorial for code examples.

Методы

Модуль ipcRenderer имеет следующие методы для прослушивания событий и отправки сообщений:

ipcRenderer.on(channel, listener)

  • channel string (Строка)
  • listener Function (Функция)

Слушает channel, когда приходит новое сообщение listener вызовется с listener(event, args...).

ipcRenderer.off(channel, listener)

  • channel string (Строка)
  • listener Function (Функция)

Alias for ipcRenderer.removeListener.

ipcRenderer.once(channel, listener)

  • channel string (Строка)
  • listener Function (Функция)

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.

ipcRenderer.addListener(channel, listener)

  • channel string (Строка)
  • listener Function (Функция)

Alias for ipcRenderer.on.

ipcRenderer.removeListener(channel, listener)

  • channel string (Строка)
  • listener Function (Функция)

Удаляет указанный listener из массива слушателей конкретного channel.

ipcRenderer.removeAllListeners(channel)

  • channel string (Строка)

Удаляет всех слушателей или слушателей из указанного channel.

ipcRenderer.send(channel, ...args)

  • channel string (Строка)
  • ...args any[]

Send an asynchronous message to the main process via channel, along with arguments. Arguments will be serialized with the Structured Clone Algorithm, just like window.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 will throw an exception.

Since the main process does not have support for DOM objects such as ImageBitmap, File, DOMMatrix and so on, such objects cannot be sent over Electron's IPC to the main process, as the main process would have no way to decode them. Attempting to send such objects over IPC will result in an error.

Основной процесс обрабатывает его путем прослушивания channel с модулем ipcMain.

If you need to transfer a MessagePort to the main process, use ipcRenderer.postMessage.

If you want to receive a single response from the main process, like the result of a method call, consider using ipcRenderer.invoke.

ipcRenderer.invoke(channel, ...args)

  • channel string (Строка)
  • ...args any[]

Возвращает Promise<any> - Разрешается с ответом от основного процесса.

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 window.postMessage, so prototype chains will not be included. Sending Functions, Promises, Symbols, WeakMaps, or WeakSets will throw an exception.

Основной процесс должен прослушивать channel с ipcMain.handle().

Например:

// 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
})

If you need to transfer a MessagePort to the main process, use ipcRenderer.postMessage.

If you do not need a response to the message, consider using ipcRenderer.send.

Note Sending non-standard JavaScript types such as DOM objects or special Electron objects will throw an exception.

Since the main process does not have support for DOM objects such as ImageBitmap, File, DOMMatrix and so on, such objects cannot be sent over Electron's IPC to the main process, as the main process would have no way to decode them. Attempting to send such objects over IPC will result in an error.

Note If the handler in the main process throws an error, the promise returned by invoke will reject. However, the Error object in the renderer process will not be the same as the one thrown in the main process.

ipcRenderer.sendSync(channel, ...args)

  • channel string (Строка)
  • ...args any[]

Возвращает any - Значение, отправленное обработчиком ipcMain.

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 window.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 will throw an exception.

Since the main process does not have support for DOM objects such as ImageBitmap, File, DOMMatrix and so on, such objects cannot be sent over Electron's IPC to the main process, as the main process would have no way to decode them. Attempting to send such objects over IPC will result in an error.

Основной процесс обрабатывает его, прослушивая channel с помощью модуля ipcMain, и отвечая, установив 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().

ipcRenderer.postMessage(channel, message, [transfer])

  • channel string (Строка)
  • message any
  • transfer MessagePort[] (optional)

Send a message to the main process, optionally transferring ownership of zero or more MessagePort objects.

The transferred MessagePort objects will be available in the main process as MessagePortMain objects by accessing the ports property of the emitted event.

Например:

// Renderer process
const { port1, port2 } = new MessageChannel()
ipcRenderer.postMessage('port', { message: 'hello' }, [port1])

// Main process
ipcMain.on('port', (e, msg) => {
const [port] = e.ports
// ...
})

For more information on using MessagePort and MessageChannel, see the MDN documentation.

ipcRenderer.sendToHost(channel, ...args)

  • channel string (Строка)
  • ...args any[]

Как ipcRenderer.send, но событие будет отправлено в элемент <webview> на главной странице вместо основного процесса.