ipcMain
进程:主进程
从主进程到渲染进程的异步通信
ipcMain
是一个 EventEmitter 的实例。 当在主进程中使用时,它处理从渲染器进程(网页)发送出来的异步和同步信息。 从渲染器进程发送的消息将被发送到该模块。
ipcRenderer
进程: Renderer
从渲染器进程到主进程的异步通信
ipcRenderer
是一个 EventEmitter 的实例。 你可以使用它提供的一些方法从渲染进程 (web 页面) 发送同步或异步的消息到主进程。 也可以接收主进程回复的消息。
渲染进程间的直接通讯不被允许的,虽然ipcRenderer
是一个 EventEmitter 的实例,可以自己emit自己on
webContents
进程:主进程
webContents
是一个 EventEmitter。 负责渲染和控制网页, 是 BrowserWindow
对象的一个属性。
主进程与主进程
1.ipcMain.emit 和 ipcMain.on
因为ipcMain
是一个 EventEmitter 的实例,可以自己emit给自己on
const {ipcMain} = require('electron') //发事件 ipcMain.emit(customEventName, params) //监听事件 ipcMain.on(customEventName,(event,params)=>{})
2.mainWin.webContents.emit 和 mainWin.webContents.on
因为webContents 是一个 EventEmitter 的实例,可以自己emit给自己on
注意: 使用webContents.send在此场景下,webContents.on 监听不到,webContents.send不等同于webContents.emit
const {ipcMain, BrowserWindow} = require('electron') app.on('ready', () => { const mainWin = new BrowserWindow() //发事件 mainWin.webContents.emit(customEventName, params) //监听事件 mainWin.webContents.on(customEventName,(event,params)=>{}) })
主进程与渲染进程
假设mainWin是BrowserWindow的一个实例,mainWin.send == mainWin.webContents.send
主进程-》渲染进程
const {ipcMain, BrowserWindow} = require('electron')
app.on('ready', () => {
const mainWin = new BrowserWindow()
//发事件
mainWin.webContents.send(customEventName, params) //或者mainWin.send
})
// 渲染进程,如render.js
const { ipcRenderer } = require('electron')
ipcRenderer.on(eventName, handler)
渲染进程-》主进程
//发 ipcRenderer.send(customEventName,params) //监听 ipcMain.on(customEventName,(event,params)=>{})
渲染进程与渲染进程
渲染进程1-》渲染进程2 的实现:
渲染进程1-》主进程-》渲染进程2