Le processus principal d'Electron gère toutes les pages Web et leurs processus de rendu correspondants, et le processus de rendu ne peut gérer que les pages Web correspondantes. Le crash d'un processus de rendu n'affectera pas les autres processus de rendu ; alors, comment les deux processus communiquent-ils ?
Electron a deux processus : le processus principal et le processus de rendu.
. Chaque instance de BrowserWindow exécute la page Web pendant son processus de rendu. Lorsqu'une instance de BrowserWindow est détruite, le processus de rendu correspondant sera également terminé.
Processus de rendu
1. Le processus de rendu ne peut gérer que la page Web correspondante. L'effondrement d'un processus de rendu n'affectera pas les autres processus de rendu.
2. Le processus de rendu communique avec le processus principal via IPC pour effectuer des opérations GUI sur la page Web. L'appel d'API locales liées à l'interface graphique directement à partir du processus de rendu est limité en raison de la sécurité et d'éventuelles fuites de ressources.
La communication entre les processus peut être effectuée via le module Inter-Process Communication (IPC) : ipcMain et ipcRenderer Pour créer une fenêtre, veuillez appeler la classe BrowserWindow, mais elle ne peut être utilisée que dans le processus principal ( main.js ):
1. 首先由主进程向渲染进程发送消息,告诉它窗口的id(开启了多个渲染进程); 2. 在渲染进程接收winid,并在关闭窗口时发送给主进程 3. 在主进程中接收需要关闭的渲染进程 const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
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();
})
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!