ipcRenderer

    进程: Renderer

    ipcRenderer 是一个 的实例。 你可以使用它提供的一些方法从渲染进程 (web 页面) 发送同步或异步的消息到主进程。 也可以接收主进程回复的消息。

    请参阅 进程间通信(IPC)教程 获取代码示例。

    ipcRenderer 模块使用以下方法来监听事件和发送消息。

    • channel string
    • listener Function
      • event IpcRendererEvent

    监听 channel, 当新消息到达,将通过 listener(event, args…) 调用 listener。

    ipcRenderer.once(channel, listener)

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

    添加一次性 listener 函数。 这个 listener 只会在 channel下一次收到消息的时候被调用,之后这个监听器会被移除。

    ipcRenderer.removeListener(channel, listener)

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

    为特定的 channel 从监听队列中删除特定的 listener 监听者.

    • string

    移除所有的监听器,当指定 channel 时只移除与其相关的所有监听器。

    ipcRenderer.send(channel, ...args)

    • channel string
    • ...args any[]

    通过channel向主进程发送异步消息,可以发送任意参数。 参数将使用 进行序列化,就像 window.postMessage,因此原型链将不会包含在内。 发送 Functions, Promises, Symbols, WeakMaps, 或 WeakSets 将抛出异常

    如果需要将一个 传输到主进程,请使用 ipcRenderer.postMessage

    如果你想从主进程中收到单个响应,比如一个方法调用的结果, 请考虑使用

    ipcRenderer.invoke(channel, ...args)

    • channel string
    • ...args any[]

    Returns Promise<any> - Resolves 主进程返回值

    通过 channel 向主过程发送消息,并异步等待结果。 参数将使用 进行序列化,就像 window.postMessage,因此原型链将不会包含在内。 发送 Functions, Promises, Symbols, WeakMaps, 或 WeakSets 将抛出异常

    主进程应该使用 监听 channel

    例如:

    如果需要将一个 MessagePort 传输到主进程,请使用 。

    如果你不需要回复此消息,请考虑使用 ipcRender.send

    • channel string
    • ...args any[]

    通过 channel 向主过程发送消息,并同步等待结果。 参数将使用 Structured Clone Algorithm进行序列化,就像 ,因此原型链将不会包含在内。 发送 Functions, Promises, Symbols, WeakMaps, 或 WeakSets 将抛出异常

    主进程可以使用 ipcMain 监听 channel来接收这些消息,并通过 设置回复消息。

    ipcRenderer.postMessage(channel, message, [transfer])

    • channel string
    • transfer MessagePort[] (optional)

    发送消息到主进程,同时可以选择性发送零到多个 MessagePort 对象

    从渲染进程发送到主进程的MessagePort对象可作为对象访问触发事件的ports端口属性

    例如:

    1. // 渲染进程
    2. const { port1, port2 } = new MessageChannel()
    3. ipcRenderer.postMessage('port', { message: 'hello' }, [port1])
    4. // 主进程
    5. ipcMain.on('port', (e, msg) => {
    6. const [port] = e.ports
    7. // ...
    8. })

    更多关于如何使用 MessagePortMessageChannel的信息详见 MDN documentation

    ipcRenderer.sendTo(webContentsId, channel, ...args)

    • webContentsId number
    • channel string
    • ...args any[]

    通过 channel 发送消息到带有 webContentsId 的窗口.

    • channel string
    • ...args any[]

    就像 ipcRenderer.send,不同的是消息会被发送到 host 页面上的 <webview> 元素,而不是主进程。

    事件对象