首頁 >web前端 >前端問答 >electron製作QQ音樂客戶端-主進程與渲染進程通訊

electron製作QQ音樂客戶端-主進程與渲染進程通訊

灭绝师太
灭绝师太原創
2021-08-26 17:56:222410瀏覽

        Electron主進程 管理 所有網頁及其對應的渲染進程,而渲染進程只能管理對應的網頁, 一個渲染進程的崩潰不會影響其他渲染進程;那麼兩個進程之間如何通訊呢?

electron製作QQ音樂客戶端-主進程與渲染進程通訊 

Electron 有兩種行程:主行程和渲染程式。

            主程式

##         1.網頁以建立每一個 BrowserWindow 實例在其渲染過程中執行網頁, 當一個 BrowserWindow 實例被銷毀時,對應的渲染過程也會被終止。

        2.主程式 管理 所有網頁及其對應的渲染程式。

    

        

渲染進程

      1. 渲染進程只能管理對應的網頁, 一個渲染進程的當機不會影響其他渲染進程。

      2. 渲染程序透過 IPC 與主程序通訊在網在頁上執行 GUI 作業。出於安全性和可能的​​資源洩漏考慮,直接從渲染器程序中呼叫與本機 GUI 相關的 API 受到限制。

    


    程式之間的通訊可以透過Inter-Process Communication(IPC) 模組進行:ipcMain 與 ipcRenderer

##   類,但只能在主程序中使用(main.js):

#  ##

    const { BrowserWindow } = require('electron')
    const win = new BrowserWindow()

  若要從渲染程序呼叫主程序,請使用IPC 模組: 例如淨化視窗模式下自訂關閉視窗功能 #

     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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

相關文章

看更多