electron通信

Electron桌面應用實現兩個窗口(渲染進程)之間的通信,傳輸數據:

       方法1在兩個網頁(渲染進程)間共享數據最簡單的方法是使用瀏覽器中已經實現的 HTML5 API。 其中比較好的方案是用 Storage API, localStoragesessionStorage 或者 IndexedDBweb

       方法2使用Electron 內的 IPC 機制實現。將數據存儲在主進程的某個全局變量中,而後在多個渲染進程中使用 remote 模塊來訪問它。例:瀏覽器

       //主進程中session

       Global.saveData = { shareData: data};electron

      

       //在窗口1設置修改數據ui

       require('electron').remote.getGlobal(‘saveData’). shareData = ‘new value’code

       //在窗口2中得到更新的數據接口

require('electron').remote.getGlobal(‘saveData’). shareData進程

 

方法3:主進程作消息中轉事件

//在主進程中監聽窗口1發送事件,並接受數據後發送給窗口2ip

        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返回的數據
   constwindowID = BrowserWindow.getFocusedWindow().id;
  'share-data'win.webContents.send(,data, windowID);
'factorial-computed'function (event, data, id) ipcRenderer.on(,{
  //此處的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()
    })
 

主進程與渲染進程之間的通信:

//在渲染器進程中

constrequire'electron'ipc =().ipcRenderer
constdocument'sync-msg'syncMsgBtn =.getElementById()
 
'click'function () syncMsgBtn.addEventListener(,{
const'synchronous-message''ping' reply = ipc.sendSync(,)
const`同步消息回覆: ${reply}` message =
document'sync-reply' .getElementById().innerHTML = message
})

//在主進程中

constrequire'electron'ipc =().ipcMain
'synchronous-message'function (event, arg) ipc.on(,{
'pong'  event.returnValue =
})
相關文章
相關標籤/搜索