2024-12-11【Electron】開發(fā)細節(jié)

1 主進程與渲染進程 預(yù)加載腳本

主進程

每個 Electron 應(yīng)用都有一個單一的主進程慕趴,作為應(yīng)用程序的入口點厌丑。 主進程在 Node.js 環(huán)境中運行,這意味著它具有 require 模塊和使用所有 Node.js API 的能力

渲染器進程

每個 Electron 應(yīng)用都會為每個打開的 BrowserWindow ( 與每個網(wǎng)頁嵌入 ) 生成一個單獨的渲染器進程。 洽如其名漾唉,渲染器負責(zé) 渲染 網(wǎng)頁內(nèi)容。 所以實際上堰塌,運行于渲染器進程中的代碼是須遵照網(wǎng)頁標(biāo)準(zhǔn)的 (至少就目前使用的 Chromium 而言是如此) 赵刑。

渲染進程本不參與node.js API使用,但有一些代碼會由主進程暴露給渲染進程场刑,用以在渲染進程環(huán)境中運行般此,優(yōu)先于網(wǎng)頁內(nèi)容加載,即preload.js

開啟渲染進程使用preload.js

方法1:關(guān)閉上下文隔離

function createMainWindow () {
    const mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,  // 關(guān)閉上下文隔離 渲染進程可訪問node.js API
            preload: `${__dirname}/preload.js`  //${__dirname} 代表當(dāng)前文件所在目錄
        }
    });
    mainWindow.loadFile('src/index.html');
}

方法2:使用contexBridge模塊 在preload.js文件中更改

const { contextBridge } = require('electron');

contextBridge.exposeInMainWorld("BASE_URL", "http://api.xxx.com");  //(名稱牵现,值)
contextBridge.exposeInMainWorld("HttpUtil", {
    get: (url, params) => {
        console.info("axios", url, params);
    },
    post: (url, data) => {
        console.info("axios-post", url, data);
    }
});

2 單向通信

2-1

實現(xiàn)功能:通過頁面輸入和點擊铐懊,渲染進程向主進程發(fā)送請求,更改window屬性瞎疼,如應(yīng)用標(biāo)題名
總的步驟可區(qū)分為:
設(shè)計步驟:設(shè)計請求的觸發(fā)——設(shè)計請求——設(shè)計響應(yīng)
觸發(fā)步驟:觸發(fā)請求——發(fā)送請求——接受請求并響應(yīng)


設(shè)計請求的觸發(fā)

繪制輸入框及發(fā)送按鈕-index.html

<input type="text" id="title">
<button id="btn">修改標(biāo)題</button>

綁定事件

<script>
        const title = document.getElementById('title');
        const btn = document.getElementById('btn');
        // 綁定事件
        btn.addEventListener('click', () => {
            const value = title.value;
            window.electronApi.setTitle(value);  // 向主進程發(fā)送消息
        });
</script>

設(shè)計請求

預(yù)加載:渲染進程只負責(zé)渲染畫面科乎,如要更改元素,需向其暴露操作接口
暴露接口通過預(yù)加載實現(xiàn)丑慎。

預(yù)加載需求分析-preload.js

  • 發(fā)送消息的模塊ipcRenderer
  • 發(fā)送消息的實現(xiàn)
const { contextBridge, ipcRenderer } = require('electron');  //ipcRenderer 實現(xiàn)渲染進程與主進程之間的異步通信

contextBridge.exposeInMainWorld('electronApi', {  //暴露接口名與其實現(xiàn) 接口名就是對象名 實現(xiàn)就是對象的方法或子成員 
    setTitle: (title) => {
        ipcRenderer.send('set-title', title);  //通過ipcRenderer向主進程發(fā)送事件通知(事件/消息名稱喜喂, 消息內(nèi)容)
    },
});

設(shè)計監(jiān)聽與響應(yīng)

主進程的請求處理-main.js
主進程監(jiān)聽渲染進程發(fā)送的消息瓤摧,并做出響應(yīng)

ipcMain.on('set-title', (event, title) => {
    BrowserWindow.getFocusedWindow().setTitle(title);  //獲取當(dāng)前焦點窗口并設(shè)置標(biāo)題  event用以消息反饋
});

監(jiān)聽消息類型為“set-title”的消息,并做出響應(yīng)


最終呈現(xiàn)


2-2

雙向通信

2-1


3 DarkMode


4 應(yīng)用菜單

5 托盤菜單

6 Notification 通知

主進程

渲染進程

7 快捷鍵

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玉吁,一起剝皮案震驚了整個濱河市照弥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌进副,老刑警劉巖这揣,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異影斑,居然都是意外死亡给赞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門矫户,熙熙樓的掌柜王于貴愁眉苦臉地迎上來片迅,“玉大人,你說我怎么就攤上這事皆辽「躺撸” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵驱闷,是天一觀的道長耻台。 經(jīng)常有香客問我,道長空另,這世上最難降的妖魔是什么盆耽? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮扼菠,結(jié)果婚禮上摄杂,老公的妹妹穿的比我還像新娘。我一直安慰自己娇豫,他們只是感情好匙姜,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布畅厢。 她就那樣靜靜地躺著冯痢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪框杜。 梳的紋絲不亂的頭發(fā)上浦楣,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音咪辱,去河邊找鬼振劳。 笑死,一個胖子當(dāng)著我的面吹牛油狂,可吹牛的內(nèi)容都是我干的历恐。 我是一名探鬼主播寸癌,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弱贼!你這毒婦竟也來了蒸苇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤吮旅,失蹤者是張志新(化名)和其女友劉穎溪烤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庇勃,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡檬嘀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了责嚷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸳兽。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖罕拂,靈堂內(nèi)的尸體忽然破棺而出贸铜,到底是詐尸還是另有隱情,我是刑警寧澤聂受,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布蒿秦,位于F島的核電站,受9級特大地震影響蛋济,放射性物質(zhì)發(fā)生泄漏棍鳖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一碗旅、第九天 我趴在偏房一處隱蔽的房頂上張望渡处。 院中可真熱鬧,春花似錦祟辟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至痊臭,卻和暖如春绽左,著一層夾襖步出監(jiān)牢的瞬間拼窥,已是汗流浹背鲁纠。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工迄汛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鹃觉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓翼闹,卻偏偏與公主長得像坚弱,于是被迫代替她去往敵國和親史汗。 傳聞我的和親對象是個殘疾皇子瓷蛙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容