ipcRenderer
History
Version(s) | Changes |
---|---|
None |
|
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)
channel
cadenalistener
Funciónevent
IpcRendererEvent...args
any[]
Escucha al channel
. Cuando llega un nuevo mensaje listener
es llamado con listener(event, args...)
.
ipcRenderer.off(channel, listener)
channel
cadenalistener
Funciónevent
IpcRendererEvent...args
any[]
Alias for ipcRenderer.removeListener
.
ipcRenderer.once(channel, listener)
channel
cadenalistener
Funciónevent
IpcRendererEvent...args
any[]
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
cadenalistener
Funciónevent
IpcRendererEvent...args
any[]
Alias for ipcRenderer.on
.
ipcRenderer.removeListener(channel, listener)
channel
cadenalistener
Funciónevent
IpcRendererEvent...args
any[]
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. Arguments will be serialized with the Structured Clone Algorithm, just like window.postMessage
, so prototype chains will not be included. 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. Arguments will be serialized with the Structured Clone Algorithm, just like window.postMessage
, so prototype chains will not be included. 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, theError
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. Arguments will be serialized with the Structured Clone Algorithm, just like window.postMessage
, so prototype chains will not be included. 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
cadenamensaje
cualquieratransfer
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
// ...
})
For more information on using MessagePort
and MessageChannel
, see the MDN documentation.
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.