菜鳥的 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: