总结一下渲染进程和渲染进程之间的通信方法:
方案一 使用全局共享属性(常用)
// 主进程中在global上自定义对象 global.saveDefault= { token: 'default value', name: 'default value', password: 'default value', } // 在登录页 In page 1 require('electron').remote.getGlobal('saveDefault').token= 'token' require('electron').remote.getGlobal('saveDefault').name= 'name' // 在主页 In page 2 就可以获取到 console.log(require('electron').remote.getGlobal('saveDefault').name) console.log(require('electron').remote.getGlobal('saveDefault').token) console.log(require('electron').remote.getGlobal('saveDefault').password)
方案二 利用主进程做消息中转
// 在主进程中 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 } )
方案三 使用 ipcRenderer.sendTo()
https://electronjs.org/docs/api/ipc-renderer
//webContentsId : Number //channel : String 描述信息 //...args : any[] 参数 ipcRenderer.sendTo(webContentsId, channel, [, arg1][, arg2][, ...]) ipcRenderer.sendTo(windowId, 'ping', 'someThing')
方案四 利用 remote 接口直接获取渲染进程发送消息
// 渲染进程 // 获取窗口的id remote.BrowserWindow.fromId(winId).webContents.send('ping', 'someThing');
获取进程id的方法
第一种:通过 global 设置和获取
第一种是:主进程创建事件,发送信息
// 主进程中 win1.webContents.send('distributeIds',{ win2Id : win2.id }); win2.webContents.send('distributeIds',{ win1Id : win1.id });
交流
我是老礼,公众号「进军全栈攻城狮」作者 ,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!