主進程和渲染進程
1. 主進程:
在Electron中運行package.json和main腳本的進程稱爲主進程。例如,main.js文件屬於主進程,同時在main.js文件中直接引入的js文件也屬於主進程(如:require(’./mainProcess/menu.js’))
2. 渲染進程:
electron使用Chromium的多進程機制來渲染頁面,每個頁面擁有一個自己的進程,該進程稱爲渲染進程。如main.js文件中加載了index.html文件,在index.html文件中引入的index.js就屬於渲染進程
3. 主進程和渲染進行之間通信的常見方式:
注意:這些方法全部需要在主進程已經創建了BrowserWindow之後纔有效.
- 1> ipcRenderer用於渲染進程
- ipcRenderer.on(channel, listener) --> channel爲事件頻道,字符串.listener爲觸發回調函數,用於響應webContent.send()
- ipcRenderer.send(channel, data) --> 概念同上,用於向ipcMain發送異步信息
- 2> ipcMain用於主進程,響應從渲染進程中發送的消息
- ipcMain.on(channel,listener) --> 響應從ipcRender中相同channel
- 3> event.sender:主進程監聽到渲染進程發送的消息,在響應事件回調函數中使用event.sender.send()方法可以向渲染進程發送消息
- 4> webContent:ipcMain本身是無法直接發送事件的,只能通過響應事件回調的event來發送,那如果我們想先讓主進程發送消息就可以使用webcontent.這個webcontent是在BrowserWIndow實例中的方法
- webContent.send(channel,data) --> 主進程向渲染進程發送消息
4. 不同渲染進程之間共享數據
[1] 我們可以簡單的使用HTML5中提供的API來實現,如localStorage和sessionStorage
[2] 在electron中,我們可以在主進程中將一個對象存儲爲全局變量,在渲染進程中通過remote模塊進行操作