ホームページ > 記事 > ウェブフロントエンド > Electron が QQ 音楽クライアントを生成 - メインプロセスとレンダリングプロセス間の通信
Electron のメイン プロセスはすべての Web ページとそれに対応するレンダリング プロセスを管理しますが、レンダリング プロセスは対応する Web ページのみを管理できます。1 つのレンダリング プロセスが崩壊しても、他のレンダリング プロセスには影響しません。では、2 つのプロセスはどのように通信するのでしょうか?
Electron にはメインプロセスとレンダリングプロセスの 2 つのプロセスがあります。
。各 BrowserWindow インスタンスは、レンダリング プロセス中に Web ページを実行します。BrowserWindow インスタンスが破棄されると、対応するレンダリング プロセスも終了します。
レンダリング プロセス
1. レンダリング プロセスは、対応する Web ページのみを管理できます。1 つのレンダリング プロセスがクラッシュしても、他のレンダリングには影響しません。プロセス。2. レンダリング プロセスは、IPC を介してメイン プロセスと通信し、Web ページ上で GUI 操作を実行します。ローカル GUI 関連の API をレンダラー プロセスから直接呼び出すことは、セキュリティとリソース リークの可能性のため制限されています。
プロセス間の通信は、プロセス間通信 (IPC) モジュール: ipcMain および ipcRenderer を介して実行できます。
ウィンドウを作成するには、BrowserWindow クラスを呼び出します。ただし、メイン プロセス (main.js) でのみ使用できます:
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
1. 首先由主进程向渲染进程发送消息,告诉它窗口的id(开启了多个渲染进程);
win.once('ready-to-show', () => { win.webContents.send('init_win_id', win.id); win.show() });
2. 在渲染进程接收winid,并在关闭窗口时发送给主进程
//渲染进程监听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); }
3. 在主进程中接收需要关闭的渲染进程
// 主进程获取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 中国語 Web サイトの他の関連記事を参照してください。