Aller au contenu principal

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 que event.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 string
  • listener Function

Ecoute sur channel et listener sera appelé ainsi: listener(event, args...) à la réception d'un nouveau message .

ipcMain.once(channel, listener)

  • channel string
  • listener Function

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 string
  • listener 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 string
  • listener Function<Promise<any> | 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.

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

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 string
  • listener Function<Promise<any> | 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.