菜鸟的 Electron 踩坑集锦。html
对于 主进程和渲染进程之间的通讯,使用 IPC 是很方便的。可是渲染进程之间呢? 哈哈,我这个码农看来又踩到一个坑了。node
使用全局共享属性:git
// In the main process. global.sharedObject = { someProperty: 'default value' } // In page 1. require('electron').remote.getGlobal('sharedObject').someProperty = 'new value' // In page 2. console.log(require('electron').remote.getGlobal('sharedObject').someProperty)
但不具有事件机制,没有实质的通讯功能。 固然说到这里就想起了 Node 中的全局对象了。github
利用主进程作消息中转: 此方案仍是很好的。api
// In the main process. ipcMain.on('ping-event', (event, arg) => { yourWindow.webContents.send('pong-event', 'something'); } // In renderer process // 1 ipcRenderer.send('ping-event', (event, arg) => { // do something } ) // 2 ipcRenderer.on('pong-event', (event, arg) => { // do something } )
利用 remote 接口直接获取渲染进程发送消息:electron
// renderer process // get Window by ID remote.BrowserWindow.fromId(winId).webContents.send('ping', 'someThing');
渲染进程获取 ID 就有多种方法了:ui
第一种: 经过 global 设置和获取
第一种是: 主进程建立事件,发送信息atom
// main process win1.webContents.send('distributeIds',{ win2Id : win2.id }); win2.webContents.send('distributeIds',{ win1Id : win1.id });
第三种: 写个文件什么的均可以,方法仍是多种多样的。code
参考:
须要了解的 API: