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'
})

 

最新文章

  1. 点击空白处 div隐藏掉了
  2. JavaWeb Chapter 7 监听器
  3. 注解Annotation 详解(转)
  4. Android中动画
  5. OS | 哲学家问题
  6. 为什么说Parcelable 比Serializable更高效
  7. DES加密,Tk写的简单的GUI
  8. JDBC使用sql语句
  9. Effective Java提升Code Coverage代码涵盖率 - 就是爱Java
  10. pandas学习笔记(一)
  11. Shuttle 学习
  12. C# Work PPT to PDF
  13. oracle常用函数介绍
  14. 用C#学习数据结构之链表
  15. Linux 下配置 Git 操作免登录 ssh 公钥
  16. [剑指Offer]39-数组中出现次数超过一半的数字(快排延申,找第k大数同理)
  17. jquery中使用datepicker限制开始日期小于结束日期
  18. JavaScript快速入门-ECMAScript本地对象(Date)
  19. 10 ref 和 out 之间的差别
  20. Qt_OpenGL_教程

热门文章

  1. SQL中哪些情况会引起全表扫描
  2. 小程序之Tab切换
  3. java枚举类型变通
  4. 云计算--网络原理与应用--20171122--STP与HSRP
  5. Beta冲刺NO.2
  6. 团队作业7——第二次项目冲刺(Beta版本12.04)
  7. Twisted 延迟调用
  8. 我的PCB电路设计(一)
  9. APP手机端加载不到资源服务器后台解决参考
  10. WIN10系统触摸板快捷键