Electron 渲染進程之間的通訊

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

相關文章
相關標籤/搜索