Electron主進程 管理 所有網頁及其對應的渲染進程,而渲染進程只能管理對應的網頁, 一個渲染進程的崩潰不會影響其他渲染進程;那麼兩個進程之間如何通訊呢?
Electron 有兩種行程:主行程和渲染程式。
主程式
2.主程式 管理 所有網頁及其對應的渲染程式。
渲染進程
1. 渲染進程只能管理對應的網頁, 一個渲染進程的當機不會影響其他渲染進程。 2. 渲染程序透過 IPC 與主程序通訊在網在頁上執行 GUI 作業。出於安全性和可能的資源洩漏考慮,直接從渲染器程序中呼叫與本機 GUI 相關的 API 受到限制。## 類,但只能在主程序中使用(main.js):
# ## const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
若要從渲染程序呼叫主程序,請使用IPC 模組: 例如淨化視窗模式下自訂關閉視窗功能 # 1. 首先由主进程向渲染进程发送消息,告诉它窗口的id(开启了多个渲染进程); 2. 在渲染进程接收winid,并在关闭窗口时发送给主进程 3. 在主进程中接收需要关闭的渲染进程 win.once('ready-to-show', () => {
win.webContents.send('init_win_id', win.id);
win.show()
});
//渲染进程监听init_win_id事件(自定义),将winid赋给全局变量winid
let winid = '';
require('electron').ipcRenderer.on('init_win_id', (event, message) => {
winid = message;
})
// 关闭窗体
function closex(){
//渲染进程里把窗口id发给主进程
const { ipcRenderer } = require('electron')
ipcRenderer.send('close_window', winid);
}
// 主进程获取winid关闭窗体
ipcMain.on('close_window', (event, arg) => {
//app.quit()单个窗口可以直接app.quit()
//win.close();
// 1、接收渲染进程发来的窗口id
let winid = arg;
console.log(winid);
// 2、通过id找到对应的BrowserWindow对象(win、win22),调用这个对象的close()关闭对应的窗口
BrowserWindow.fromId(winid).close();
})
以上是electron製作QQ音樂客戶端-主進程與渲染進程通訊的詳細內容。更多資訊請關注PHP中文網其他相關文章!