本文へスキップ

ipcMain

メインプロセスからレンダラプロセスへ非同期的に通信します。

プロセス: メイン

ipcMainモジュールはイベントエミッタです。メインプロセスで使用される場合、レンダラプロセス(ウェブページ)から送信された非同期および同期のメッセージを処理します。レンダラから送信されたメッセージはこのモジュールに送出されます。

使用例については、IPCチュートリアルを参照してください。

メッセージの送信

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

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

メソッド

ipcMainモジュールには、イベントをリッスンするための次のメソッドがあります。

ipcMain.on(channel, listener)

  • channel 文字列
  • listener 関数

channelをリッスンします。新しいメッセージが到着すると、listener(event, args...)listenerが呼び出されます。

ipcMain.once(channel, listener)

  • channel 文字列
  • listener 関数

イベントに対して一度だけ実行されるlistener関数を追加します。このlistenerは、channelにメッセージが送信された次の回だけ呼び出され、その後削除されます。

ipcMain.removeListener(channel, listener)

  • channel 文字列
  • listener 関数
    • ...args any[]

指定されたchannelのリッスナ配列から指定されたlistenerを削除します。

ipcMain.removeAllListeners([channel])

  • channel 文字列(オプション)

指定されたchannelのリッスナを削除します。

ipcMain.handle(channel, listener)

  • channel 文字列
  • listener Function<Promise<any> | any>

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

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

メインプロセス
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)
// ...
}

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

メインプロセスでhandleからスローされたエラーは、シリアル化されるため透過的ではなく、元のエラーのmessageプロパティだけがレンダラプロセスに提供されます。#24427 を参照してください。

ipcMain.handleOnce(channel, listener)

  • channel 文字列
  • listener Function<Promise<any> | any>

単一の呼び出し可能なIPCメッセージを処理し、その後リスナーを削除します。ipcMain.handle(channel, listener)を参照してください。

ipcMain.removeHandler(channel)

  • channel 文字列

存在する場合は、channelのハンドラを削除します。