ipcRenderer
History
Version(s) | Changes |
---|---|
None |
|
Communication asynchrone d'un processus de rendu vers le processus principal.
Process: Renderer
Le module ipcRender
est un EventEmitter. Il fournit quelques méthodes permettant d'envoyer des messages synchrones et asynchrones au processus principal depuis le processus de rendu (page web). Vous pouvez également recevoir des réponses du processus principal.
See IPC tutorial for code examples.
Méthodes
Le module de ipcRenderer
possède les méthodes suivantes pour écouter les événements et envoyer des messages :
ipcRenderer.on(channel, listener)
channel
stringlistener
Functionevent
IpcRendererEvent...args
any[]
Ecoute sur channel
et listener
sera appelé ainsi: listener(event, args...)
à la réception d'un nouveau message .
ipcRenderer.off(channel, listener)
channel
stringlistener
Functionevent
IpcRendererEvent...args
any[]
Supprime du tableau d'écouteurs le listener
spécifié pour le channel
spécifié.
ipcRenderer.once(channel, listener)
channel
stringlistener
Functionevent
IpcRendererEvent...args
any[]
Ajoute un listener
à déclenchement unique pour l’événement. Ce listener
sera appelé uniquement lors de la prochaine émission d'un message sur le channel
, après quoi il sera supprimé.
ipcRenderer.addListener(channel, listener)
channel
stringlistener
Functionevent
IpcRendererEvent...args
any[]
Alias for ipcRenderer.on
.
ipcRenderer.removeListener(channel, listener)
channel
stringlistener
Functionevent
IpcRendererEvent...args
any[]
Alias for ipcRenderer.off
.
ipcRenderer.removeAllListeners([channel])
channel
string (facultatif)
Supprime tous les écouteurs du channel
spécifié. Supprime tous les écouteurs de tous les canaux si aucun canal n'est spécifié.
ipcRenderer.send(channel, ...args)
channel
string...args
any[]
Envoie un message asynchrone ainsi que des arguments au processus principal via channel
. Arguments will be serialized with the Structured Clone Algorithm, just like window.postMessage
, so prototype chains will not be included. L’envoi de fonctions, de promesses, de symboles, de WeakMaps ou de WeakSets lèvera une exception.
NOTE: L'envoi de types Javascript non standards tels que des objets DOM ou des objets spéciaux Electron est déprécié, et déclenchera une exception à partir d'Electron 9.
Le processus principal ne prenant pas en charge les objets DOM tels que
ImageBitmap
,File
,DOMMatrix
et ainsi de suite, de tels objets ne pourront pas être envoyés au processus principal par l'IPC d'Electron, car celui-ci n'a aucun moyen de les décoder . Toute tentative d’envoi de tels objets via IPC entraînera une erreur.
The main process handles it by listening for channel
with the ipcMain
module.
Si vous avez besoin de transférer un MessagePort
au processus principal, utilisez ipcRenderer.postMessage
.
Si vous souhaitez recevoir une réponse unique du processus principal, comme le résultat d’un appel de méthode, envisagez d’utiliser plutôt ipcRenderer.invoke
.
ipcRenderer.invoke(channel, ...args)
channel
string...args
any[]
Retourne une Promise<any>
- qui se résout avec la réponse du processus principal.
Envoie un message au processus principal via channel
et attend un résultat asynchrone. Arguments will be serialized with the Structured Clone Algorithm, just like window.postMessage
, so prototype chains will not be included. L’envoi de fonctions, de promesses, de symboles, de WeakMaps ou de WeakSets lèvera une exception.
The main process should listen for channel
with ipcMain.handle()
.
Par exemple :
// Processus de rendu
ipcRenderer.invoke('some-name', someArgument).then((result) => {
// ...
})
// Processus principal
ipcMain.handle('some-name', async (event, someArgument) => {
const result = wait doSomeWork(someArgument)
return result
})
Si vous avez besoin de transférer un MessagePort
au processus principal, utilisez ipcRenderer.postMessage
.
Si vous n’attendez pas de réponse au message, envisagez d’utiliser ipcRenderer.send
.
Note: L'envoi de types Javascript non standards tels que des objets DOM ou des objets spécifiques à Electron déclenchera une exception.
Le processus principal ne prenant pas en charge les objets DOM tels que
ImageBitmap
,File
,DOMMatrix
et ainsi de suite, de tels objets ne pourront pas être envoyés au processus principal par l'IPC d'Electron, car celui-ci n'a aucun moyen de les décoder . Toute tentative d’envoi de tels objets via IPC entraînera une erreur.
Note Si dans le processus principal, le gestionnaire lance une erreur, la promesse retournée par
invoke
sera rejetée. Cependant, l'objetError
dans le processus de rendu ne sera pas le même que celui lancé dans le processus principal.
ipcRenderer.sendSync(canal, ...args)
channel
string...args
any[]
Returns any
- The value sent back by the ipcMain
handler.
Envoie un message au processus principal de manière asynchrone via channel
et attend un résultat asynchrone. Arguments will be serialized with the Structured Clone Algorithm, just like window.postMessage
, so prototype chains will not be included. L’envoi de fonctions, de promesses, de symboles, de WeakMaps ou de WeakSets lèvera une exception.
NOTE: L'envoi de types Javascript non standards tels que des objets DOM ou des objets spéciaux Electron est déprécié, et déclenchera une exception à partir d'Electron 9.
Le processus principal ne prenant pas en charge les objets DOM tels que
ImageBitmap
,File
,DOMMatrix
et ainsi de suite, de tels objets ne pourront pas être envoyés au processus principal par l'IPC d'Electron, car celui-ci n'a aucun moyen de les décoder . Toute tentative d’envoi de tels objets via IPC entraînera une erreur.
The main process handles it by listening for channel
with ipcMain
module, and replies by setting event.returnValue
.
⚠️ AVERTISSEMENT: L’envoi d’un message synchrone bloquera l’ensemble du processus de rendu jusqu’à ce que la réponse soit reçue, vous ne devez donc utiliser cette méthode qu'en dernier recours . It's much better to use the asynchronous version,
invoke()
.
ipcRenderer.postMessage(channel, message, [transfer])
channel
stringmessage
anytransfer
MessagePort[] (facultatif)
Envoie un message au processus principal, en transférant éventuellement la détention d'objets MessagePort
.
The transferred MessagePort
objects will be available in the main process as MessagePortMain
objects by accessing the ports
property of the emitted event.
Par exemple :
// 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(canal, ...args)
channel
string...args
any[]
Comme ipcRenderer.send
, mais l'événement sera envoyé à l'élément <webview>
dans la page hôte au lieu du processus main.