ipcMain
メインプロセスからレンダラプロセスへ非同期的に通信します。
プロセス: メイン
ipcMain
モジュールはイベントエミッタです。メインプロセスで使用される場合、レンダラプロセス(ウェブページ)から送信された非同期および同期のメッセージを処理します。レンダラから送信されたメッセージはこのモジュールに送出されます。
使用例については、IPCチュートリアルを参照してください。
メッセージの送信
メインプロセスからレンダラプロセスにメッセージを送信することもできます。詳細については、webContents.sendを参照してください。
- メッセージを送信する場合、イベント名は
channel
です。 - 同期のメッセージに返信するには、
event.returnValue
を設定する必要があります。 - 送信者に非同期メッセージを送信するには、
event.reply(...)
を使用できます。このヘルパーメソッドは、メインフレームではないフレーム(例:iframe)から送信されたメッセージを自動的に処理しますが、event.sender.send(...)
は常にメインフレームに送信します。
メソッド
ipcMain
モジュールには、イベントをリッスンするための次のメソッドがあります。
ipcMain.on(channel, listener)
channel
文字列listener
関数event
IpcMainEvent...args
any[]
channel
をリッスンします。新しいメッセージが到着すると、listener(event, args...)
でlistener
が呼び出されます。
ipcMain.once(channel, listener)
channel
文字列listener
関数event
IpcMainEvent...args
any[]
イベントに対して一度だけ実行される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>event
IpcMainInvokeEvent...args
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>event
IpcMainInvokeEvent...args
any[]
単一の呼び出し可能なIPCメッセージを処理し、その後リスナーを削除します。ipcMain.handle(channel, listener)
を参照してください。
ipcMain.removeHandler(channel)
channel
文字列
存在する場合は、channel
のハンドラを削除します。