Electron桌面应用实现两个窗口(渲染进程)之间的通讯,传输数据:

方法1在两个网页(渲染进程)间共享数据最简单的方法是使用浏览器中已经实现的 HTML5 API。 其中比较好的方案是用 Storage API, localStoragesessionStorage 或者 IndexedDB

方法2使用Electron 内的 IPC 机制实现。将数据存储在主进程的某个全局变量中,然后在多个渲染进程中使用 remote 模块来访问它。例:

//主进程中

Global.saveData = { shareData: data};

//在窗口1设置修改数据

require('electron').remote.getGlobal(‘saveData’). shareData = ‘new value’

//在窗口2中获得更新的数据

require('electron').remote.getGlobal(‘saveData’). shareData

方法3:主进程做消息中转

//在主进程中监听窗口1发送事件,并接受数据后发送给窗口2

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

yourWindow.webContents.send('pong-event', 'something');

}

//在渲染进程中,窗口1发送数据

ipcRenderer.send('ping-event', (event, arg) => {

// do something

})

//在渲染进程的窗口2中监听主进程发送的事件,接收数据

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

// do something  })

方法4:利用 remote 接口直接获取渲染进程发送消息:

       主要步骤:

     ·1.在窗口1中获取当前窗口的id,窗口加载完成后发送一个事件,携带当前窗口id和发送的数据;  然后监听窗口2返回的数据
   const windowID = BrowserWindow.getFocusedWindow().id;
  win.webContents.send('share-data',data, windowID)
ipcRenderer.on('factorial-computed', function (event, data, id) {
  //此处的data就是窗口2传输来的数据
})
            2. 在窗口2中监听窗口1事件
    const ipc = require('electron').ipcRenderer
    const BrowserWindow = require('electron').remote.BrowserWindow
 
ipc.on(' share-data', function (event,data,fromWindowId) {
//此处的data就是窗口1传输来的数据
      const fromWindow = BrowserWindow.fromId(fromWindowId)
      fromWindow.webContents.send('factorial-computed',data, fromWindowId)
      window.close()
    })
 

主进程与渲染进程之间的通讯:

//在渲染器进程中

const ipc = require('electron').ipcRenderer
const syncMsgBtn = document.getElementById('sync-msg')
 
syncMsgBtn.addEventListener('click', function () {
  const reply = ipc.sendSync('synchronous-message', 'ping')
  const message = `同步消息回复: ${reply}`
  document.getElementById('sync-reply').innerHTML = message
})

//在主进程中

const ipc = require('electron').ipcMain
ipc.on('synchronous-message', function (event, arg) {
  event.returnValue = 'pong'
})

 

electron通讯的更多相关文章

  1. electron-vue小试身手

    最近一个项目(vue)需求是用硬件来触发web端页面显示以及效果的切换,客户的硬件设备只支持用tcp协议通讯,而我们的前端呢是用不了tcp的,众所周知在浏览器端,我们只能用http/https协议(a ...

  2. 研究Electron主进程、渲染进程、webview之间的通讯

    背景 由于某个Electron应用,需要主进程.渲染进程.webview之间能够互相通讯. 不过因为Electron仅提供了主进程与渲染进程的通讯,没有渲染进程之间或渲染进程与webview之间通讯的 ...

  3. Electron + Websoket 通讯

    Electron + WebSocket + node.js 通信 描述 本文主要介绍了结合 Electron 和 node.js 进行 Websocket 通讯的一个简单例子. 项目结构 main. ...

  4. Electron使用与学习--(基本使用与菜单操作)

    对于electron是个新手,下面纯属个人理解.如有错误,欢迎指出.   一.安装 如果你本地按照github上的 # Install the `electron` command globally ...

  5. Electron 不完全快速手册

    Electron能干嘛 Vscode 基于Electron开发的,他是用来开发桌面软件的,可以轻易的跨平台 他的前身是atomshell,图标很丑,不用在意,一点也不像vscode也不用在意.   L ...

  6. electron + vue 实践项目

    github地址 本地安装环境准备 安装node: * https://nodejs.org/en/download/ 配置webpack: npm install -g webpack(sudo权限 ...

  7. Electron 实战桌面计算器应用

    前言 Electron 是一个搭建跨平台桌面应用的框架,仅仅使用 JavaScript.HTML 以及 CSS,即可快速而容易地搭建一个原生应用.这对于想要涉及其他领域的开发者来说是一个非常大的福利. ...

  8. electron 学习笔记

    一.快速搭建一个electron 项目结构 # 克隆示例项目的仓库 $ git clone https://github.com/electron/electron-quick-start # 进入这 ...

  9. electron 使用中的注意事项

    一.ELECTRON引用JQUERY.JS electron不能像正常的html文件引用jq.js那样(为嘛不造),elecron引用jq.js的方式为: <script>window.$ ...

随机推荐

  1. 攻防组网之—-MikroTik软路由的配置和FUZZ

    作者:红发香克斯 开篇之前一直想借助一台高性能PC利用VMWare组建一个攻防网络,之前有一贴写过找到了一个软路由系统,就是可以在VMWare中使用的路由器操作系统,那个系统还挺常用,上次帖子写到了安 ...

  2. Leaflet客户端学习笔记

    Leaflet介绍 Leaflet 是一个为建设交互性好适用于移动设备地图,而开发的现代的.开源的 JavaScript 库.代码仅有 33 KB,但它具有开发在线地图的大部分功能.支持插件扩展, L ...

  3. Linux安装Python2.7.9

    1.下载python wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz 2.解压.编译安装 tar -zxvf Python- ...

  4. 如何从RxJava升级到RxJava2

    如何从RxJava升级到RxJava2. RxJava2已经推出有一年半的时间,由于之前RxJava已经在现有项目中广泛使用,而RxJava2在除了很多命名外并没有太多革新,所以相信有很多人跟我一样都 ...

  5. java.lang.system 类源码解读

    通过每块代码进行源码解读,并发现源码使用的技术栈,扩展视野. registerNatives 方法解读 /* register the natives via the static initializ ...

  6. Python split()方法

    Python split()方法 描述 Python split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串 语法 split()方法语法: str.sp ...

  7. JUnit单元测试遇到的问题及解决思路

    JUnit是Java单元测试框架,我们在对开发的系统进行单元测试的时候,也遇到了如何测试多个测试用例的问题.  背景:我们的所有测试用例都保存在Excel文件中,该文件包含测试用例和预期输出.我们希望 ...

  8. Hibernate实体类注解解释

    Hibernate注解1.@Entity(name="EntityName")必须,name为可选,对应数据库中一的个表2.@Table(name="",cat ...

  9. c# 运算符:? ,??

    参考微软帮助 1  ?  空值条件运算符,用于在执行成员访问 (?.) 或索引 (?[) 操作之前,测试是否存在 NULL. // ? 空值条件运算符 string str = null; Conso ...

  10. DSkin 的WebUI开发模式介绍,Html快速开发Winform的UI

    新版WebUI开发模式采用MiniBlink内核,这个内核功能更完善,dll压缩之后才5M,而且提供开发者功能,内核还在更新中,而且是开源项目:https://github.com/weolar/mi ...