electron 两个窗口如何通信_聊聊 electron 中实现多窗口之间的通信方式

前言

由于自己在使用 electron 开发一个类似微信的桌面客户端App,开发这个App的目的纯粹是为了总结一下自己对于 electron 的积累总结吧,先贴出项目的源码地址:github.com/1111mp/elec… 。目前整个项目的基础架构都实现差不多了,包括整个应用的数据持久化(使用的是 sqlite,因为我比较喜欢用 sequelize)、多语言、主题设置、多窗口之间的通信方式 和 带有底部上滑动画的弹窗通知 等,总得来说项目的质量还可以吧,有兴趣的同学可以提前去看一下代码。第一次写这种文章,望谅解。然后废话不多说,直奔主题吧。

主/渲染进程

electron 的主进程和渲染进程:ipcMain, ipcRenderer

我想这部分应该不用介绍了,就贴出官方文档链接了,不了解的同学可以先去了解一下,然后再接着往下看。

通信方式的实现

基于主/渲染进程的事件收发机制来实现多窗口之间的通信

这种通信方式的原理就是基于主进程 ipcMain 的 on 方法向主进程注册一个事件,然后在窗口页面中通过 send 方法向渲染进程发送事件,然后触发到主进程中之前注册过的事件,事件名都是各自方法的第一个参数,用起来其实就跟 EventBus 一样,以下是官方的例子:

// 在主进程中.

const { ipcMain } = require('electron')

ipcMain.on('asynchronous-message', (event, arg) => {

console.log(arg) // prints "ping"

event.reply('asynchronous-reply', 'pong')

})

ipcMain.on('synchronous-message', (event, arg) => {

console.log(arg) // prints "ping"

event.returnValue = 'pong'

})

//在渲染器进程 (网页) 中。

const { ipcRenderer } = require('electron')

console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // prints "pong"

ipcRenderer.on('asynchronous-reply', (event, arg) => {

console.log(arg) // prints "pong"

})

ipcRenderer.send('asynchronous-message', '

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Electron 可以通过使用 IPC (Inter-Process Communication) 模块实现两个 exe 之间通信。具体步骤如下: 1. 在主进程,创建一个新的 BrowserWindow 对象,并使用 preload 选项加载一个预加载脚本。 ```javascript const { BrowserWindow } = require('electron') const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js') } }) ``` 2. 在预加载脚本,将 ipcRenderer 对象注入到 window 对象,使其可以在渲染进程使用。 ```javascript // preload.js const { ipcRenderer } = require('electron') window.ipcRenderer = ipcRenderer ``` 3. 在渲染进程,使用 `window.ipcRenderer` 对象与主进程进行通信。 ```javascript // renderer.js const { remote } = require('electron') const ipcRenderer = remote.getGlobal('ipcRenderer') ipcRenderer.send('my-message', { data: 'Hello from renderer process!' }) ipcRenderer.on('my-reply', (event, arg) => { console.log(arg) // prints "Hello from main process!" }) ``` 4. 在主进程,使用 ipcMain 对象监听渲染进程发送的消息,并回复消息。 ```javascript // main.js const { ipcMain } = require('electron') ipcMain.on('my-message', (event, arg) => { console.log(arg) // prints "{ data: 'Hello from renderer process!' }" event.reply('my-reply', 'Hello from main process!') }) ``` 这样,两个 exe 进程就可以通过 IPC 模块实现通信了。需要注意的是,IPC 通信只能在同一个电脑上的进程之间进行,无法跨越网络进行通信

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值