ipcMain
Permet de communiquer de manière asynchrone depuis le processus main avec les processus de rendu.
Processus : Main
Le module ipcMain
est un Event Emitter. Il gère, dans le processus principal, la r éception des messages asynchrones et synchrones envoyés à partir d'un processus renderer (page web). C'est vers ce module que les messages envoyés par un ou des renderer seront émis.
Pour des exemples d'utilisation, consultez le tutoriel La communication inter-processus.
Envoi de messages
Il est également possible d'envoyer des messages depuis le processus main vers un processus renderer. Voir webContents.send pour plus d'information.
- Lors de l'envoi d'un message, le nom de l'événement est
channel
. - Pour répondre à un message synchrone, vous devez définir
event.returnValue
. - Pour renvoyer un message asynchrone à l'expéditeur, vous utiliserez
event.reply(...)
. Cette méthode "helper" gérera automatiquement les messages provenant des frames qui ne sont pas la frame principale (e. . iframes) alors queevent.sender.send(...)
les enverra toujours vers la frame principale.
Méthodes
Le module ipcMain
possède les méthodes suivantes pour écouter les événements :
ipcMain.on(channel, listener)
channel
stringlistener
Functionevent
IpcMainEvent...args
any[]
Ecoute sur channel
et listener
sera appelé ainsi: listener(event, args...)
à la réception d'un nouveau message .
ipcMain.once(channel, listener)
channel
stringlistener
Functionevent
IpcMainEvent...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é.
ipcMain.removeListener(channel, listener)
channel
stringlistener
Function...args
any[]
Supprime du tableau d'écouteurs le listener
spécifié pour le channel
spécifié.
ipcMain.removeAllListeners([channel])
channel
string (facultatif)
Supprime tous les écouteurs du channel
spécifié.
ipcMain.handle(channel, listener)
channel
stringlistener
Function<Promise<any> | any>event
IpcMainInvokeEvent...args
any[]
Ajoute un gestionnaire pour un IPC pouvant utiliser invoke
. Ce gestionnaire sera appelé chaque fois qu'un moteur de rendu appellera ipcRenderer.invoke(channel, ...args)
.
Si listener
renvoie une Promise, le résultat final de la promesse sera retourné en réponse à l'appelant distant. Sinon, la valeur de retour de l'écouteur sera utilisée comme valeur de la réponse.
ipcMain.handle('my-invokable-ipc', async (event, ...args) => {
const result = await somePromise(...args)
return result
})
async () => {
const result = await ipcRenderer.invoke('my-invokable-ipc', arg1, arg2)
// ...
}
L'event
qui est passé comme premier argument au gestionnaire est le même que celui passé à un event listener régulier. Il contient des informations sur le WebContents à l'origine de la demande d'invoke.
Les erreurs émises par l'appel à handle
dans le processus principal ne sont pas transparentes car elles sont sérialisées et seule la propriété message
de l'erreur d'origine est fournie au processus de rendu. Pour plus de détails, veuillez vous référer au problème #24427 sur github.
ipcMain.handleOnce(channel, listener)
channel
stringlistener
Function<Promise<any> | any>event
IpcMainInvokeEvent...args
any[]
Gère un message IPC unique pouvant utiliser invoke
, puis supprime l’écouteur. Voir ipcMain.handle(channel, listener)
.
ipcMain.removeHandler(channel)
channel
string
Supprime, si présent, tout gestionnaire pour channel
.