メインコンテンツへ飛ぶ

ipcMain

メインプロセスからレンダラープロセスへ非同期で通信を行います。

プロセス: Main

ipcMain モジュールは Event Emitter を継承しています。 メインプロセスで使用される場合、レンダラープロセス (ウェブページ) から送られる非同期及び同期メッセージを処理します。 レンダラーから送信されたメッセージは、このモジュールに送られます。

使用例は、IPC チュートリアル をご覧ください。

メッセージを送信する

また、メインプロセスからレンダラープロセスにメッセージを送ることもできます。より詳しくは webContents.send を参照して下さい。

  • メッセージを送信しているとき、イベント名は channel です。
  • 同期メッセージに返信をするには、event.returnValue を設定する必要があります。
  • 非同期メッセージを送信者に返送するには、event.reply(...) を使用できます。 このヘルパーメソッドはメインフレームではないフレーム (例: iframe) から来るメッセージを自動的に処理します。一方、event.sender.send(...) は常にメインフレームに送信されます。

メソッド

ipcMain オブジェクトは、イベントを受け取るために以下のメソッドがあります。

ipcMain.on(channel, listener)

  • channel string
  • listener Function

channel に新しいメッセージが来たときに listenerlistener(event, args...) として呼ばれます、

ipcMain.once(channel, listener)

  • channel string
  • listener Function

イベントに対する一回限りの listener 関数を追加します。 この listener は、次にメッセージが channel へ送信されたときに、削除されてから呼び出されます。

ipcMain.removeListener(channel, listener)

  • channel string
  • listener Function
    • ...args any[]

指定した channel の listener 配列から、指定した listener を削除します。

ipcMain.removeAllListeners([channel])

  • channel string (任意)

指定した channel の listener を全て削除します。

ipcMain.handle(channel, listener)

  • channel string
  • listener Function<Promise<any> | any>

invoke 可能な IPC のハンドラを追加します。 このハンドラは、レンダラが ipcRenderer.invoke(channel, ...args) を呼び出したとき常に呼び出されます。

listener が Promise を返す場合、Promise の最終的な結果は、リモート呼び出し元への応答として返されます。 それ以外は、リスナーの戻り値が応答の値として使用されます。

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

ハンドラーの最初の引数として渡される event は、通常のイベントリスナーに渡されるものと同じです。 どの WebContents が呼び出しリクエスト元であるかに関する情報が含まれています。

メインプロセスの handle から投げられたエラーはシリアライズされ、元のエラーからの message プロパティのみがレンダラープロセスに提供されるため、非透過的です。 詳細は #24427 をご参照ください。

ipcMain.handleOnce(channel, listener)

  • channel string
  • listener Function<Promise<any> | any>

1 つの invoke 可能な IPC メッセージを処理し、リスナーを削除します。 ipcMain.handle(channel, listener) を参照してください。

ipcMain.removeHandler(channel)

  • channel string

channel にハンドラがあれば削除します。