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

ipcMain

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

Процесс: Главный

Модуль ipcMain представляет собой Event Emitter. При использовании в основном процессе он обрабатывает асинхронные и синхронные сообщения, отправленные из процесса рендеринга (веб-страницы). Сообщения, отправленные из процесса рендеринга, будут направлены в этот модуль.

For usage examples, check out the IPC tutorial.

Sending messages

Кроме того, существует возможность пересылать сообщения из главного процесса в процессы рендеринга. Более подробно это описано в webContents.send.

  • При отправке сообщения, событие именуется channel.
  • Чтобы ответить на синхронное сообщение, нужно задать event.returnValue.
  • Чтобы отправить ассинхронное сообщение назад отправителю, используйте event.reply(...). Этот вспомогательный метод автоматически обрабатывает сообщения, поступающие из фреймов, которые не являются основным фреймом (например, iframe), в то время как event.sender.send(...) всегда будет посылать в основной фрейм.

Методы

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

ipcMain.on(channel, listener)

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

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

ipcMain.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.

ipcMain.removeListener(channel, listener)

  • channel string (Строка)
  • listener Function (Функция)
    • ...args any[]

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

ipcMain.removeAllListeners([channel])

  • channel string (опционально)

Удаляет всех слушателей channel.

ipcMain.handle(channel, listener)

  • channel string (Строка)
  • listener Function<Promise\<void> | any>

Adds a handler for an invokeable IPC. This handler will be called whenever a renderer calls ipcRenderer.invoke(channel, ...args).

Если listener возвращает Promise, то конечный результат Promise, будет возвращен в качестве ответа удаленному вызывающему объекту. В противном случае, возвращаемое значение слушателя будет использоваться как значение ответа.

Main Process
ipcMain.handle('my-invokable-ipc', async (event, ...args) => {
const result = await somePromise(...args)
return result
})
Renderer Process
async () => {
const result = await ipcRenderer.invoke('my-invokable-ipc', arg1, arg2)
// ...
}

event, которое передается обработчику в качестве первого аргумента, такое же, какое передается обычному прослушивателю событий. Оно включает информацию о том, какой WebContents является источником запроса на вызов.

Errors thrown through handle in the main process are not transparent as they are serialized and only the message property from the original error is provided to the renderer process. Please refer to #24427 for details.

ipcMain.handleOnce(channel, listener)

  • channel string (Строка)
  • listener Function<Promise\<void> | any>
    • event IpcMainInvokeEvent
    • ...args any[]

Handles a single invokeable IPC message, then removes the listener. See ipcMain.handle(channel, listener).

ipcMain.removeHandler(channel)

  • channel string (Строка)

Удаляет обработчик для channel, если он присутствует.

IpcMainEvent object

Документацию для объекта event, передаваемого в callback, можно найти в документации по структуре ipc-main-event.

IpcMainInvokeEvent object

Документацию по объекту event, переданном обратным вызовом handle, можно найти в документации по структуре ipc-main-invoke-event.