美文网首页
[Electron] 主进程 / 渲染进程通信

[Electron] 主进程 / 渲染进程通信

作者: 卓灬不凡 | 来源:发表于2021-01-06 11:43 被阅读0次

    ipcMain / ipcRenderer

    • 使用场景

    渲染进程通知主进程帮忙处理指定业务,主进程在通知渲染进程是否处理完成

    • 同步通信

    channel:通知事件名称,可随意命名
    arg:发送通知时传递的参数
    event.returnValue:同步返回数据

    // 主进程 - 接收消息 - 返回数据
    const { ipcMain } = require('electron')
    ipcMain.on('channel', (event, arg) => {
      console.log(arg) // prints "ping"
      event.returnValue = 'pong'
    })
    
    // 渲染进程 - 发送通知
    const { ipcRenderer } = require('electron')
    console.log(ipcRenderer.sendSync('channel', 'ping')) // prints "pong"
    
    • 异步通信

    event.reply:将异步消息发送回发送者

    // 主进程 - 接收消息 - 发送异步通知
    const { ipcMain } = require('electron')
    ipcMain.on('channel', (event, arg) => {
      console.log(arg) // prints "ping"
      event.reply('channel-reply', 'pong')
    })
    
    // 渲染进程 - 发送通知 - 主进程处理完后 - 接收通知
    const { ipcRenderer } = require('electron')
    ipcRenderer.on('channel-reply', (event, arg) => {
      // 接收主进程发送的异步通知
      console.log(arg) // prints "pong"
    })
    ipcRenderer.send('channel', 'ping')
    

    remote

    与 ipc 模块不同,remote 更加简便,可以直接调用 electron 中的内置模块, 而不必通过 ipc 发送通信

    注意事项: 因为安全原因,remote 模块能在以下几种情况下被禁用:

    • BrowserWindow - 通过设置 enableRemoteModule 选项为 false
    • <webview> - 通过把 enableremotemodule属性设置成 false
    • 引用
    // NodeJs 引用
    const { remote } = require('electron').remote
    
    // VUE 中直接引用
    remote: window.require('electron').remote
    
    • 使用

    remote 可以直接调用 electron 中的内置模块,所以使用方式例子如下

    // 以使用 ipcRenderer 为例
    // 直接调用 ipcRenderer
    remote.ipcRenderer.send('channel', 'ping')
    

    remote 也可以获取当前窗口 remote.getCurrentWindow()

    • remote 模块有以下方法:

    # 在Vue中可通过此方法调用 electron 中的自定义js模块
    # 例如:this.electron.remote.require('./util/test.js')
    # 返回在主进程中执行 `require(module)` 所返回的对象。
    # `module` String
    remote.require(module)
    
    # 返回该网页所属的 `BrowserWindow` 对象。
    remote.getCurrentWindow()
    
    # 返回该网页的 `WebContents` 对象
    remote.getCurrentWebContents()
    
    # 返回在主进程中名为 `name` 的全局变量(即 `global[name]`) 。
    # `name` String
    remote.getGlobal(name)
    
    # 返回主进程中的 `process` 对象。等同于 `remote.getGlobal('process')` 但是有缓存。
    remote.process
    

    相关文章

      网友评论

          本文标题:[Electron] 主进程 / 渲染进程通信

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