美文网首页
electron 渲染进程(web 页面)和主进程 通信 之(i

electron 渲染进程(web 页面)和主进程 通信 之(i

作者: 冰落寞成 | 来源:发表于2021-05-21 11:56 被阅读0次

    Electron 中的两种进程通信方式,分别为:

    • 使用 ipcMain 和 ipcRenderer 两个模块
    • 使用 remote 模块

    一、 ipcRenderer

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

    1.1 方法

    ipcRenderer.send(channel, ...args)

    通过channel向主进程发送异步消息,可以发送任意参数。

    ipcRenderer.on(channel, listener)

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

    监听 channel,当接收到新的消息时 listener 会以 listener(event, args...) 的形式被调用。

    二、ipcMain

    从主进程到渲染进程的异步通信。
    也可以从主进程向渲染进程发送消息,查阅ebContents.send获取更多信息。

    • 发送消息时,事件名称为channel
    • 回复同步信息时,需要设置event.returnValue
    • 可以使用event.reply(...)将异步消息发送回发送者。 This helper method will automatically handle messages coming from frames that aren't the main frame (e.g. iframes) whereas event.sender.send(...) will always send to the main frame.

    2.1方法

    ipcMain.on(channel, listener)

    • channel String
    • listener Function
      • event IpcMainEvent
      • ...args any[]

    监听 channel,当接收到新的消息时 listener 会以 listener(event, args...) 的形式被调用。

    异步通信示例:

    ipcRenderer 代码:

    import { ipcRenderer } from 'electron'
    ipcRenderer.send('toMain', data) // 向主进程发送消息
    ipcRenderer.on('fromMain', (event, ...args) => func(...args))  // 监听
    

    ipcMain 代码:

    import {  ipcMain} from 'electron'
    ipcMain.on('toMain', function (event, arg) { // 监听渲染进程,传递的数据
      // 逻辑处理
      event.reply('fromMain', arg); // 返回给渲染进程处理好的数据
    
    });
    

    同步通信示例:

    ipcRenderer代码

    ipcRenderer.sendSync(channel, data)
    

    ipcMain 代码

    ipcMain.on('syncGetLocalServer', function (event, arg) {
      // 读入文件,同步返回数据
      fs.readFile("./localServer.xml", { encoding: "utf-8" }, (err, data) => {
        event.returnValue=data; // 返回给渲染进程
      })
    });
    

    相关文章

      网友评论

          本文标题:electron 渲染进程(web 页面)和主进程 通信 之(i

          本文链接:https://www.haomeiwen.com/subject/wvhwjltx.html