使用Electron开发出来的桌面应用都是多进程
的,其中包含了一个主进程(Main)
和至少一个渲染进程(Renderer)
。
主进程控制整个应用的生命周期
,通过electron中的一些模块与GUI交互
,同时控制每一个渲染进程
。
渲染进程会在BrowserWindow对象
创建出的窗口中渲染出Web页面,每个渲染页面都运行在独立的进程中。
主进程与渲染进程之间通信
ipc模块 + window.webContents
ipc模块包含ipcMain
和 ipcRenderer
两个模块,其中ipcMain在主进程中使用,ipcRenderer在渲染进程中使用,在使用之前,要使用require
引入对应的模块。
ipc模块中的方法:
ipcMain.on(msg, () => {})
:监听渲染进程发送的msg消息,并做出响应。
ipcMain.once(msg, () => {})
:监听渲染进程发送的msg消息,并做出响应,但是监听到一次msg事件后自动移除这个监听器。
ipcRenderer.on(msg, () => {})
:监听主进程发送的msg消息,并做出响应。
ipcRenderer.once(msg, () => {})
:监听主进程发送的msg消息,并做出响应,但是监听到一次msg事件后自动移除这个监听器。
ipcRenderer.send(msg, data)
:监听渲染进程向主进程发送msg异步消息,并携带参数data。
ipcRenderer.sendSync(msg, data)
:监听渲染进程向主进程发送msg同步消息,并携带参数
ipcRenderer.sentTo(webContentId, msg, data)
:监听渲染进程向具有webContentId的窗口发送消息
ipcRenderer.sendToHost(msg, data)
:监听渲染进程向host页面上的 <webview>
元素发送消息
ipc模块还提供了删除指定监听器
和删除所有监听器
的方法:removeListener()
、removeAllListener()
,这两个方法在ipcMain和ipcRenderer这两个模块中的用法是一样的。