您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“electron如何制作QQ音樂客戶端之主進程與渲染進程通訊”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“electron如何制作QQ音樂客戶端之主進程與渲染進程通訊”這篇文章吧。
Electron主進程 管理 所有網頁及其對應的渲染進程,而渲染進程只能管理相應的網頁, 一個渲染進程的崩潰不會影響其他渲染進程;那么兩個進程之間如何通訊呢?
Electron 有兩種進程:主進程和渲染進程。
主進程
1. 主進程通過創(chuàng)建 BrowserWindow 實例來創(chuàng)建 網頁。 每一個 BrowserWindow 實例在其渲染過程中運行網頁, 當一個 BrowserWindow 實例被銷毀時,對應的渲染過程也會被終止。
2.主進程 管理 所有網頁及其對應的渲染進程。
渲染進程
1. 渲染進程只能管理相應的網頁, 一個渲染進程的崩潰不會影響其他渲染進程。
2. 渲染進程通過 IPC 與主進程通信在網在頁上執(zhí)行 GUI 操作。 出于安全和可能的資源泄漏考慮,直接從渲染器進程中調用與本地 GUI 有關的 API 受到限制。
進程之間的通信可以通過 Inter-Process Communication(IPC) 模塊進行:ipcMain 和 ipcRenderer
若要創(chuàng)建一個窗口,請調用 BrowserWindow 類,但只能在主進程中使用(main.js):
const { BrowserWindow } = require('electron') const win = new BrowserWindow()
若要從渲染進程調用主進程,請使用 IPC 模塊: 例如凈化窗口模式下自定義關閉窗口功能
1. 首先由主進程向渲染進程發(fā)送消息,告訴它窗口的id(開啟了多個渲染進程);
win.once('ready-to-show', () => { win.webContents.send('init_win_id', win.id); win.show() });
2. 在渲染進程接收winid,并在關閉窗口時發(fā)送給主進程
//渲染進程監(jiān)聽init_win_id事件(自定義),將winid賦給全局變量winid let winid = ''; require('electron').ipcRenderer.on('init_win_id', (event, message) => { winid = message; }) // 關閉窗體 function closex(){ //渲染進程里把窗口id發(fā)給主進程 const { ipcRenderer } = require('electron') ipcRenderer.send('close_window', winid); }
3. 在主進程中接收需要關閉的渲染進程
// 主進程獲取winid關閉窗體 ipcMain.on('close_window', (event, arg) => { //app.quit()單個窗口可以直接app.quit() //win.close(); // 1、接收渲染進程發(fā)來的窗口id let winid = arg; console.log(winid); // 2、通過id找到對應的BrowserWindow對象(win、win22),調用這個對象的close()關閉對應的窗口 BrowserWindow.fromId(winid).close(); })
以上是“electron如何制作QQ音樂客戶端之主進程與渲染進程通訊”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。