Electron中页面之间的通信

Posted flamestudio

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Electron中页面之间的通信相关的知识,希望对你有一定的参考价值。

Electron的运行环境为Chromium + Node.js, 而Chromium采用的是多进程机制,

也就是说每个页面都是一个独立的进程(渲染进程),因此页面之间是没有直接关系的,

要想进行通信,需要借助主进程作为桥梁。

所以我们首先先来学习主进程和渲染进程怎么通信:

1. 渲染进程---->主进程

发送端:

  ipcRenderer.send(channel, data)

接收端:

  ipcMain.on(channel, listener)

2. 主进程---->渲染进程

发送端:

  ① 被动发送

  在主进程通过ipcMain.on接收到渲染进程的消息时,可以通过listener函数的event参数得到发送者, 回复消息,

  event.sender.send(channel, data)

  ② 主动发送

  win(要发送给的渲染进程窗体对象变量).webContents.send(channel, data)

 接收端:

  ipcRenderer.on(channel, listener)

 

有了以上背景知识,页面间通信就很简单了,页面1发送事件给主进程,主进程再发送事件给页面2即可。

 

注:

在Electron 5.x以后的版本,渲染进程默认没有启用Node.js环境, 

在创建窗体时需要指定启用Node环境,否则require命令在渲染进程中将不支持,无法导入electron中的ipcRenderer。

    let win = new BrowserWindow({
        webPreferences: {
            nodeIntegration: true
        }
    })

 

以上是关于Electron中页面之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

Electron 渲染进程主进程通信 01

如何实现electron多页面间通信

在tablayout片段之间进行通信[重复]

17-7-20-electron中主进程和渲染进程区别与通信

在 Electron 中的两个渲染器进程之间进行通信

Electron 前端和 Python 后端之间的通信