Saltar al contenido principal

ipcRenderer

Comunica asincrónicamente desde un proceso de renderizado al proceso principal.

Proceso: Renderer

El módulo ipcRenderer es un EventEmitter. Proporciona un par de métodos para enviar mensajes sincrónicos y asincrónicos desde el proceso de renderizado (página web) al proceso principal. También puede recibir respuestas del proceso principal.

See IPC tutorial for code examples.

Métodos

El módulo ipcRenderer tiene los siguientes métodos para escuchar los eventos y mensajes enviados:

ipcRenderer.on(channel, listener)

Escucha al channel. Cuando llega un nuevo mensaje listener es llamado con listener(event, args...).

ipcRenderer.off(channel, listener)

Alias for ipcRenderer.removeListener.

ipcRenderer.once(channel, listener)

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)

Alias for ipcRenderer.on.

ipcRenderer.removeListener(channel, listener)

Elimina el listener especificado del arreglo listener para el channel especificado.

ipcRenderer.removeAllListeners(channel)

  • channel cadena

Elimina todos los oyentes, o aquellos del channel especificado.

ipcRenderer.send(channel, ...args)

  • channel cadena
  • ...args any[]

Envía un mensaje asíncrono al main process a través de channel, junto con los argumentos. Los argumentos serán serializados con el Structured CloneAlgorithm, al igual que window.postMessage, así que las cadenas del prototipo no estarán incluidas. El envío de funciones, promesas, símbolos, WeakMaps o WeakSets lanzará una excepción.

NOTA: Enviar tipos de JavaScript no estándar tales como objetos DOM o objetos especiales de Electron lanzará una excepción.

Dado que el proceso principal no tiene soporte para objetos DOM tales como ImageBitmap, File, DOMMatrix y así sucesivamente, tales objetos no pueden ser enviados sobre el IPC de Eectron al proceso principal, ya que el proceso principal no tendría forma de decodificarlos. Intentar enviar tales objetos sobre el IPC resultará en un error.

El main process maneja esto escuchando por channel con el módulo 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 cadena
  • ...args any[]

Devuelve Promise<any> - Resuelve con la respuesta desde el main process.

Envía un mensaje al main process a través de channel y espera un resultado asíncrono. Los argumentos serán serializados con el Structured CloneAlgorithm, al igual que window.postMessage, así que las cadenas del prototipo no estarán incluidas. El envío de funciones, promesas, símbolos, WeakMaps o WeakSets lanzará una excepción.

El main process debería escuchar por el channel con ipcMain.handle().

Por ejemplo:

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

Dado que el proceso principal no tiene soporte para objetos DOM tales como ImageBitmap, File, DOMMatrix y así sucesivamente, tales objetos no pueden ser enviados sobre el IPC de Eectron al proceso principal, ya que el proceso principal no tendría forma de decodificarlos. Intentar enviar tales objetos sobre el IPC resultará en un 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 cadena
  • ...args any[]

Devuelve any - El valor enviado de vuelta por el controlador ipcMain.

Envía un mensaje al main process a través de channel y expera un resultado sincrónicamente. Los argumentos serán serializados con el Structured CloneAlgorithm, al igual que window.postMessage, así que las cadenas del prototipo no estarán incluidas. El envío de funciones, promesas, símbolos, WeakMaps o WeakSets lanzará una excepción.

NOTA: Enviar tipos de JavaScript no estándar tales como objetos DOM o objetos especiales de Electron lanzará una excepción.

Dado que el proceso principal no tiene soporte para objetos DOM tales como ImageBitmap, File, DOMMatrix y así sucesivamente, tales objetos no pueden ser enviados sobre el IPC de Eectron al proceso principal, ya que el proceso principal no tendría forma de decodificarlos. Intentar enviar tales objetos sobre el IPC resultará en un error.

El processo principal lo controlo por escuchar channel con el módulo ipcMain, y contesta configurando event.returnValue.

⚠️ ADVERTENCIA: El envío de un mensaje síncrono bloqueará todo el proceso del renderizador hasta que se reciba la respuesta, así que use este método solo como último recurso. Es mucho mejor usar la versión asincróna invoke().

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

  • channel cadena
  • mensaje cualquiera
  • 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.

Por ejemplo:

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

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

Para más información sobre el uso de MessagePort y MessageChannel, vea la Documentación MDN.

ipcRenderer.sendToHost(channel, ...args)

  • channel cadena
  • ...args any[]

Es como ipcRenderer.send pero el evento se enviará al <webview>elemento en la página host en vez de el proceso principal.