主进程与渲染进程之间的通信

(异步)渲染进程给主进程发送消息,主进程监听到后,给渲染进程反馈

渲染进程
//ipcRenderer.js

//渲染进程给主进程发送消息
var sendreplay = document.querySelector('#sendreplay')
sendreplay.onclick = function() {
  ipcRenderer.send('sendreplay', 'this is renderer aaa')
}
//接收主进程的反馈
ipcRenderer.on('replay', function(event, data) {
  console.log(data)
})
主进程
//ipcMain.js

//监听渲染进程发送过来的消息
ipcMain.on('sendreplay', function(event, data) {
  console.log(data)
  //反馈给渲染进程
  event.sender.send('replay', 'ok haha')
})

(同步)

渲染进程
sendsync.onclick = function() {
  var msg = ipcRenderer.sendSync('sendresync', 'this is renderer ccc')
  console.log('bb' + msg)
}
主进程
ipcMain.on('sendresync', function(event, data) {
  console.log('aa' + data)
  event.returnValue = 'this is sync main'
})

渲染进程没有办法直接调用主进程中的模块,通过remote模块间接的调用主进程中的模块

渲染进程之间的通信

localStorage

image.png

a渲染进程先给主进程发送消息,主进程再通知b渲染进程,b进程再通知a进程

a渲染进程
//发送
var openNewWindow = document.querySelector('#openNewWindow')
openNewWindow.onclick = function() {
  var aid = 123
  ipcRenderer.send('openNewWindow', aid)
}

//监听
ipcRenderer.on('toIndex', function(event, data) {
  console.log(data)
})
主进程
ipcMain.on('openNewWindow', function(event, aid) {
  //1.获取当前窗口的对象
  var winId = BrowserWindow.getFocusedWindow().id
  //调用 BrowserWindow打开新窗口
  win = new BrowserWindow({
    width: 400,
    height: 300
    // frame:false,
    // fullscreen:true
  })
  win.loadURL(path.join('file:', __dirname, '../news.html'))

  win.webContents.openDevTools()

  win.webContents.on('did-finish-load', function() {
    win.webContents.send('toNews', aid, winId)
  })

  win.on('closed', () => {
    win = null
  })
})
b渲染进程
ipcRenderer.on('toNews', function(event, aid, winId) {
  console.log(aid)
  //发送
  var firstWin = BrowserWindow.fromId(winId)
  firstWin.webContents.send('toIndex', 'this is news')
})

渣渣辉
1.3k 声望147 粉丝