Electron 主进程和渲染进程互相通信

对于 渲染进程 之间的通信,可见另一篇总结:Electron 渲染进程之间的通信_王俊的博客-CSDN博客_electron渲染进程之间通信
下面总结一下主进程和渲染进程之间的通信。

说明:

  • 自主到从:从Main到Renderer的消息传递,借助BrowerWindow.webContents.send()发送消息。
  • 自从到主:从Renderer到Main的消息传递,借助ipcRenderipcMain发送/接收消息。
  • 事件机制:无论是BrowerWindow.webContents.send(),还是ipc,其实都是node的事件机制,都是EventEmitter的实例。

    

electron-msg

1.主进程向渲染进程发送消息

主进程

const { app, BrowserWindow } = require('electron')
let win = null

app.on('ready', () => {
  win = new BrowserWindow({ width: 800, height: 600 })
  win.loadURL(`file://${__dirname}/index.html`)
  win.webContents.on('did-finish-load', () => {
    win.webContents.send('ping', 'whoooooooh!')
  })
})

index.html

<html>
<body>
  <script>
    require('electron').ipcRenderer.on('ping', (event, message) => {
      console.log(message) // Prints 'whoooooooh!',这里的message是object类型
    })
  </script>
</body>
</html>

2.渲染进程向主进程发送消息

index.html

<!DOCTYPE html>
<html lang="en">
 
<head>
  <title>myapp</title>
</head>
 
<body>
  <input type="" name="" id="ipt" value="">
  <button type="button" onclick="connectMain()">和主进程通信</button>
 
  <script>
    const ipc = require('electron').ipcRenderer;
    var ipt = document.getElementById('ipt')
 
    function connectMain() {
      console.log('index.html', ipt.value);
      ipc.send('getMsg', ipt.value)
    }
  </script>
</body>
 
</html>

主进程

const ipc = require('electron').ipcMain
 
ipc.on('getMsg', (sys, msg) => {
  console.log(msg)  //接收窗口传来的消息
})
 

3.主进程和渲染进程之间发送和处理消息

   可参考:electron 在主进程和渲染进程之间通信(异步和同步) – 均益个人博客

  • 回应同步消息, 可以设置 event.returnValue.
  • 回应异步消息, 可以使用 event.sender.send(...).

   例子,在主进程和渲染进程之间发送和处理消息:

(过程:渲染进程发消息->主进程接收消息并回复->渲染进程接收主进程的回复)

渲染进程:

// In renderer process (web page).
const ipcRenderer = require('electron').ipcRenderer;
console.log(ipcRenderer.sendSync('synchronous-message', 'ping')); // prints "pong"  发送同步消息

ipcRenderer.on('asynchronous-reply', function(event, arg) {    // 接收异步消息
  console.log(arg); // prints "pong"
});
ipcRenderer.send('asynchronous-message', 'ping');    // 发送异步消息

主进程: 

// In main process.
const ipcMain = require('electron').ipcMain;
ipcMain.on('asynchronous-message', function(event, arg) {    // 接收异步消息
  console.log(arg);  // prints "ping"
  event.sender.send('asynchronous-reply', 'pong');     // 回应异步消息
});

ipcMain.on('synchronous-message', function(event, arg) {    // 接收同步消息
  console.log(arg);  // prints "ping"
  event.returnValue = 'pong';
});

 希望本文对您有帮助,您的打赏是对我最大的鼓励~

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangjun0708

你的打赏将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值