精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Electron 實戰桌面計算器應用

開發 開發工具
Electron 是一個搭建跨平臺桌面應用的框架,僅僅使用 JavaScript、HTML 以及 CSS,即可快速而容易地搭建一個原生應用。這對于想要涉及其他領域的開發者來說是一個非常大的福利。

[[202426]]

Electron 是一個搭建跨平臺桌面應用的框架,僅僅使用 JavaScript、HTML 以及 CSS,即可快速而容易地搭建一個原生應用。這對于想要涉及其他領域的開發者來說是一個非常大的福利。

項目介紹

倉庫地址:lin-xin/calculator

我這里通過 Electron 實現了仿 iPhone 的計算器,通過菜單可以切換橫屏和豎屏,橫屏有更多的運算。而對于 JavaScript 進行浮點數計算來說,精度丟失是個很大問題,所以我這里使用了第三方庫 math.js 來解決這個精度的問題。

盡可能的實現了跟 iPhone 一樣的運算:

  • 1 + 2 × 3 = 7
  • 3 += 6 (再按 = 等于 9)
  • 0.1 + 0.2 = 0.3 (浮點數精度處理)

不過我下面并不是要講計算器,而是用到的 Electron 的知識點。

生命周期

在主進程中通過 app 模塊控制整個應用的生命周期。

當 Electron 完成初始化時觸發 ready 事件:

  1. app.on('ready', () => { 
  2.     // 創建窗口、加載頁面等操作 
  3. }) 

當所有的窗口都被關閉時會觸發 window-all-closed 事件:

  1. app.on('window-all-closed', () => { 
  2.     if(process.platform !== 'darwin'){ 
  3.         app.quit();     // 退出應用 
  4.     } 
  5. }) 

在開發中發現,沒有監聽該事件,打包后的應用關閉后,進程還保留著,會占用系統的內存。

窗口

本來我們的 html 只顯示在瀏覽器中,而 electron 提供了一個 BrowserWindow 模塊用于創建和控制瀏覽器窗口,我們的頁面就是顯示在這樣的窗口中。

創建窗口

通過關鍵字 new 實例化返回 win 對象,該對象有豐富的方法對窗口進行控制。

  1. win = new BrowserWindow({ 
  2.     width: 390,         // 窗口寬度 
  3.     height: 670,        // 窗口高度 
  4.     fullscreen: false,  // 不允許全屏 
  5.     resizable: false    // 不允許改變窗口size,不然布局就亂了啊 
  6. }); 

加載頁面

窗口創建完是一片空白的,可以通過 win.loadURL() 來加載要顯示的頁面。

  1. const path = require('path'); 
  2. const url = require('url'); 
  3. win.loadURL(url.format({    // 加載本地的文件 
  4.     pathname: path.join(__dirname, 'index.html'), 
  5.     protocol: 'file'
  6.     slashes: true 
  7. })) 

也可以直接加載遠程鏈接 win.loadURL(‘http://blog.gdfengshuo.com‘);

菜單

桌面應用菜單欄是最常見的功能。Electron 提供了 Menu 模塊來創建原生的應用菜單和 context 菜單,

  1. const template = [                              // 創建菜單模板 
  2.     { 
  3.         label: '查看'
  4.         submenu: [ 
  5.             {label: '豎屏', type: 'radio', checked: true},      // type 屬性讓菜單為 radio 可選 
  6.             {label: '橫屏', type: 'radio', checked: false}, 
  7.             {label: '重載',role:'reload'}, 
  8.             {label: '退出',role:'quit'}, 
  9.         ] 
  10.     } 
  11. const menu = Menu.buildFromTemplate(template);  // 通過模板返回菜單的數組 
  12. Menu.setApplicationMenu(menu);                  // 將該數組設置為菜單 

在子菜單中,通過點擊豎屏或橫屏來進行一些操作,那就可以給 submenu 監聽 click 事件。

  1. const template = [ 
  2.     { 
  3.         label: '查看'
  4.         submenu: [ 
  5.             { 
  6.                 label: '橫屏' 
  7.                 click: () => {              // 監聽橫屏的點擊事件 
  8.                     win.setSize(670,460);   // 設置窗口的寬高 
  9.                 } 
  10.             } 
  11.         ] 
  12.     } 

主進程和渲染進程通信

雖然點擊橫屏的時候,可以設置窗口的寬高,但是要如何去觸發頁面里的方法,這里就需要主進程跟渲染進程之間進行通信。

主進程,可以理解為 main.js 用來寫 electron api 的就是主進程,渲染進程就是渲染出來的頁面。

ipcMain

在主進程中可以使用 ipcMain 模塊,它控制著由渲染進程(web page)發送過來的異步或同步消息。

  1. const {ipcMain} = require('electron'
  2. ipcMain.on('send-message', (event, arg) => { 
  3.     event.sender.send('reply-message''hello world'
  4. }) 

ipcMain 監聽 send-message 事件,當消息到達時可以調用 event.sender.send 來回復異步消息,向渲染進程發送 reply-message 事件,也可以帶著參數發送過去。

ipcRenderer

在渲染進程可以調用 ipcRenderer 模塊向主進程發送同步或異步消息,也可以收到主進程的相應。

  1. const {ipcRenderer} = require('electron'
  2. ipcRenderer.on('reply-message', (event, arg) => { 
  3.     console.log(arg);       // hello world 
  4. }) 
  5. ipcRenderer.send('anything''hello everyone'); 

ipcRenderer 可以監聽到來自主進程的 reply-message 事件并拿到參數進行操作,也可以使用 send() 方法向主進程發送消息。

webContents

webContents 是一個事件發出者,它負責渲染并控制網頁,也是 BrowserWindow 對象的屬性。在 ipcMain 中的 event.sender,返回發送消息的 webContents 對象,所以包含著 send() 方法用于發送消息。

  1. const win = BrowserWindow.fromId(1);        // fromId() 方法找到ID為1的窗口 
  2. win.webContents.on('todo', () => { 
  3.     win.webContents.send('done''well done!'
  4. }) 

remote

remote 模塊提供了一種在渲染進程(網頁)和主進程之間進行進程間通訊(IPC)的簡便途徑。在 Electron 中,有許多模塊只存在主進程中,想要調用這些模塊的方法需要通過 ipc 模塊向主進程發送消息,讓主進程調用這些方法。而使用 remote 模塊,則可以在渲染進程中調用這些只存在于主進程對象的方法了。

  1. const {remote} = require('electron'
  2. const BrowserWindow = remote.BrowserWindow      // 訪問主進程中的BrowserWindow模塊 
  3. let win = new BrowserWindow();                  // 其他的跟主進程的操作都一樣 

remote 模塊除了可以訪問主進程的內置模塊,自身還有一些方法。

  1. remote.require(module)          // 返回在主進程中執行 require(module) 所返回的對象 
  2. remote.getCurrentWindow()       // 返回該網頁所屬的 BrowserWindow 對象 
  3. remote.getCurrentWebContents()  // 返回該網頁的 WebContents 對象 
  4. remote.getGlobal(name)          // 返回在主進程中名為 name 的全局變量(即 global[name]) 
  5. remote.process                  // 返回主進程中的 process 對象,等同于 remote.getGlobal('process') 但是有緩存 

shell 模塊

使用系統默認應用管理文件和 URL,而且在主進程和渲染進程中都可以用到該模塊。在菜單中,我想點擊子菜單打開一個網站,那么就可以用到 shell.openExternal() 方法,則會在默認瀏覽器中打開 URL

  1. const {shell} = require('electron'); 
  2. shell.openExternal('https://github.com/lin-xin/calculator'); 

打包應用

其實將程序打包成桌面應用才是比較麻煩的事。我這里嘗試了 electron-packager 和 electron-builder。

electron-packager

electron-packager 可以將項目打包成各平臺可直接運行的程序,而不是安裝包。

先使用 npm 安裝: npm install electron-packager -S

運行打包命令:

  1. electron-packager ./ 計算器 --platform=win32 --overwrite --icon=./icon.ico 

打包會把項目文件包括 node_modules 也一起打包進去,當然可以通過 –ignore=node_modules 來忽略文件,但是如果項目中有用到第三方庫,忽略的話則找不到文件報錯了。

正確的做法就是嚴格區分 dependencies 和 devDependencies,打包的時候只會把 dependencies 的庫打包,而使用 cnpm 安裝的會有一大堆 .0.xx@xxx 的文件,也會被打包,所以***不要用 cnpm

electron-builder

electron-builder 是基于 electron-packager 打包出來的程序再做安裝處理,將項目打包成安裝文件。

安裝:npm install electron-builder -S

打包:electron-builder –win

打***程中,***次下載 electron 可能會出現連接超時,可以使用 yarn 試試。還有 winCodeSign 和 nsis-resources 也可能會失敗,可以參考 electron-builder/issues 解決。

總結

Electron 用起來還是相對容易的,可以創建個簡單的桌面應用,只是打包的過程比較容易遇到問題,網上好像也有一鍵打包的工具,沒嘗試過。以上也都是基于 windows 7 的實踐,畢竟沒有 Mac 搞不了。

【本文為51CTO專欄作者“林鑫”的原創稿件,轉載請通過微信公眾號聯系作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2022-02-24 20:34:02

Dooring開發桌面端應用

2022-08-09 16:01:24

應用開發鴻蒙

2010-01-21 11:13:29

Linux桌面計算器

2011-09-16 14:13:15

Windows7計算器

2018-05-15 15:05:15

Linux桌面科學計算器

2022-09-01 08:42:15

C#Winformnative

2019-10-29 09:48:20

ElectronGithub開源庫

2017-07-18 14:28:04

HTMLCSSJS

2012-03-16 20:33:20

iPhone

2023-06-03 00:04:43

Electron版本安全

2024-02-21 09:43:50

ElectronNode.js前端

2023-08-16 00:52:31

Electron開發工具

2023-10-11 10:03:33

Electron桌面應用開發工具

2023-12-06 09:02:56

Electron前端

2024-08-13 15:50:57

2023-04-05 22:42:08

Electronsize工具

2022-07-11 16:19:22

css屬性鴻蒙

2013-05-23 15:06:22

Android開發體重計算器移動應用

2019-03-08 14:53:54

Windows 10計算器微軟

2022-03-10 14:57:35

ArkUIets項目開發鴻蒙
點贊
收藏

51CTO技術棧公眾號

久久久久久9999| 新狼窝色av性久久久久久| 91 com成人网| 成人午夜免费在线视频| 头脑特工队2免费完整版在线观看| 久久精品人人| 欧美成人在线影院| 中文字幕在线看高清电影| 国产69精品久久| 亚洲成人av电影在线| 日韩精品伦理第一区| 国产黄色片av| 日本在线观看不卡视频| 欧美国产极速在线| 中文字幕伦理片| 菁菁伊人国产精品| 69堂国产成人免费视频| wwwxxx黄色片| 美足av综合网| 亚洲天堂网中文字| 日韩欧美视频第二区| 肥臀熟女一区二区三区| 毛片不卡一区二区| 欧美一级免费看| 免费一级a毛片夜夜看 | 91福利在线尤物| 亚洲国产高清在线| 久久精品日产第一区二区三区乱码 | 欧美黄色一区二区| 日韩在线精品视频| 我和岳m愉情xxxⅹ视频| 国产欧美一区二区三区米奇| 5858s免费视频成人| 日本888xxxx| 亚洲欧美小说色综合小说一区| 一区二区三区在线观看欧美| 亚洲一区二区精品在线| 国产乱视频在线观看| 久久综合色播五月| 91超碰rencao97精品| 91国产免费视频| 蜜桃av噜噜一区二区三区小说| 人九九综合九九宗合| 日本道在线观看| 91久久在线| 欧美第一淫aaasss性| 中文字幕91视频| sdde在线播放一区二区| 亚洲人成电影网站| 国产精品无码久久久久一区二区| 欧洲亚洲一区二区三区| 亚洲黄页网在线观看| 91人人澡人人爽| 亚洲婷婷在线观看| 日本aa在线| 夜夜亚洲天天久久| 成人毛片100部免费看| av免费网站在线观看| 亚洲欧美日韩在线不卡| 2021狠狠干| 成人影院在线播放| 精品国产户外野外| 国产亚洲精品网站| 欧美性片在线观看| 欧美日韩国产乱码电影| www.欧美激情.com| h视频久久久| 亚洲国产小视频在线观看| 四季av综合网站| 丝袜久久网站| 中文字幕在线日韩 | 亚洲一区二区三区四区五区中文| www插插插无码免费视频网站| 日本在线视频www鲁啊鲁| 亚洲午夜影视影院在线观看| 欧美精品一区二区三区三州| 亚洲一级少妇| 欧美日韩高清在线| 肉丝美足丝袜一区二区三区四| 国产精品超碰| 亚洲欧美精品中文字幕在线| 91免费在线看片| 欧美日本不卡高清| 91po在线观看91精品国产性色| 色av性av丰满av| 寂寞少妇一区二区三区| 国产富婆一区二区三区 | 久久精品国产一区| 精品无码黑人又粗又大又长| 亚洲一区视频| 91免费视频网站| 亚洲人午夜射精精品日韩| 欧美韩日一区二区三区四区| 日韩精品一区二区三区电影| 欧美男人天堂| 777xxx欧美| 日本一区二区三区网站| 91成人免费| 欧美亚洲在线视频| 国产一区二区小视频| av动漫一区二区| 亚洲巨乳在线观看| 98色花堂精品视频在线观看| 欧美日韩一区二区在线观看视频| 波多野结衣免费观看| 亚洲欧洲色图| 欧美国产欧美亚洲国产日韩mv天天看完整 | 天堂中文资源在线观看| 1000精品久久久久久久久| 女人和拘做爰正片视频| 精品国产18久久久久久二百| 国产亚洲欧美一区| 日韩av一二三区| 韩国v欧美v日本v亚洲v| 欧美一区二区三区四区在线观看地址 | 欧美专区第一页| 国产不卡精品视频| 国产精品视频麻豆| 黄色片久久久久| 加勒比久久高清| 欧美成年人视频网站| 波多野结衣不卡| thepron国产精品| 2021狠狠干| 天天综合91| 爽爽爽爽爽爽爽成人免费观看| 成人免费看片98欧美| 成人黄色777网| 国产亚洲精品久久久久久久| 宅男噜噜噜66国产精品免费| 在线日韩欧美视频| 九九精品免费视频| www.日韩在线| 精品视频在线观看一区| 9国产精品午夜| 欧美尺度大的性做爰视频| 国产一区二区小视频| 中文一区一区三区高中清不卡| 精品久久久噜噜噜噜久久图片| 嫩草国产精品入口| 97视频在线看| 午夜视频1000| 欧美性xxxxxx| 国产熟女高潮一区二区三区| 伊人久久成人| 久久国产精品-国产精品| 国产一二三在线| 日韩成人中文电影| 91美女免费看| 国产三级精品视频| 午夜视频你懂的| 欧美色女视频| 成人免费视频97| av免费在线观看网站| 欧美一卡2卡三卡4卡5免费| 人妻少妇精品一区二区三区| 国产河南妇女毛片精品久久久| 激情五月六月婷婷| 久久久久影视| 国产精品69久久| 日本三级视频在线播放| 欧美精品在线观看一区二区| 动漫性做爰视频| av午夜一区麻豆| 国产精品免费成人| 久久大综合网| 999精品视频一区二区三区| 久久青青色综合| 亚洲精品国产精品国自产在线| 国产一级18片视频| 国产欧美精品在线观看| 国内自拍第二页| 亚洲午夜视频| 欧美裸体网站| 国产高清视频一区二区| 欧美激情综合色| 精品视频一二三| 欧美裸体bbwbbwbbw| 久久无码精品丰满人妻| 久久在线免费观看| 激情五月婷婷基地| 亚洲国内欧美| 视频一区二区三区免费观看| 国产区一区二| 热久久美女精品天天吊色| 蜜桃视频网站在线观看| 亚洲精品久久久久| 91精品国产乱码久久久| 亚洲福利一二三区| 手机看片福利视频| 高清久久久久久| 国产免费又粗又猛又爽| 伊人激情综合| 特级毛片在线免费观看| 日韩影视在线观看| 成人免费网站在线| 亚洲精品中文字幕| 欧美多人爱爱视频网站| 超碰在线影院| 日韩av一区二区在线| 国产又黄又大又爽| 日韩欧美中文字幕在线观看| 特一级黄色录像| 久久综合av免费| 国产欧美视频一区| 久久99久久99小草精品免视看| 日韩免费视频播放| 伊人久久大香线蕉综合四虎小说| 欧美一区1区三区3区公司| 中文字幕av一区二区三区四区| 国产精品女人久久久久久| 久草在线资源福利站| 欧美另类高清videos| 在线中文资源天堂| 国产视频精品在线| 亚洲国产成人一区二区 | 男人的天堂最新网址| 亚洲综合好骚| 农民人伦一区二区三区| 亚洲国产日韩欧美在线| 色阁综合av| 伊人久久大香线蕉综合网蜜芽| 国产不卡一区二区三区在线观看 | 99在线热播| 丁香婷婷久久| 国产成人午夜视频网址 | 91九色国产在线| 欧洲成人一区| 国产精彩精品视频| 国模套图日韩精品一区二区| 97热精品视频官网| 丁香花在线电影小说观看| 欧美激情精品久久久久久大尺度| 蜜桃av在线免费观看| 日韩亚洲在线观看| 在线观看美女网站大全免费| 亚洲图片在区色| 国产精品久久久久久久龚玥菲 | 成人信息集中地| 国产欧美1区2区3区| 午夜在线观看一区| 久久久久久久久久久久久久久99| 免费观看av网站| 久久久亚洲午夜电影| 亚洲一区二区观看| 久久毛片高清国产| 国产又黄又粗视频| 国产精品拍天天在线| 99成人在线观看| 亚洲免费大片在线观看| 五月婷婷一区二区| 亚洲国产综合在线| 日本三级网站在线观看| 天天av天天翘天天综合网| 国产精品视频久久久久久久| 色综合夜色一区| 中文字幕日韩三级| 91麻豆精品国产91久久久更新时间 | 国产欧美一区二区三区精品酒店| 国产精品6699| 国产日韩欧美中文在线| 成人激情直播| 亚洲a级精品| 午夜欧美性电影| 综合久久久久| 日韩国产一级片| 天堂影院一区二区| 中文字幕一区久久| 国产成人精品在线看| 欧美成人三级伦在线观看| 国产日韩欧美在线一区| 久草手机视频在线观看| 亚洲最大色网站| 国产91国语对白在线| 欧美日韩国产小视频| www.狠狠干| 亚洲免费人成在线视频观看| eeuss影院www在线观看| 欧美精品中文字幕一区| 亚洲少妇视频| 亚洲free嫩bbb| 精品一区毛片| 99视频精品全部免费看| 中文精品在线| 免费av不卡在线| 91女厕偷拍女厕偷拍高清| 国产jk精品白丝av在线观看| 亚洲日本电影在线| 性无码专区无码| 欧美一区二区三区视频免费播放| 日本黄色大片视频| 中文字幕日韩在线观看| yellow在线观看网址| 成人做爰www免费看视频网站| 麻豆精品av| 97超碰人人爱| 老司机精品导航| 国产免费a级片| 中文字幕制服丝袜成人av| 丁香六月婷婷综合| 日韩片之四级片| 91高清在线| 欧美亚洲日本网站| av不卡一区二区| 三上悠亚免费在线观看| 日韩在线一二三区| 欧美极品jizzhd欧美仙踪林| 综合激情成人伊人| 国产一卡二卡三卡| 亚洲高清福利视频| h视频在线免费观看| 国产精品久久久久久久久久久不卡 | 久久伊人一区| 亚洲无线视频| 亚洲国产午夜精品| 国产精品福利一区二区| 91精品国产综合久久香蕉最新版| 啪啪av大全导航福利综合导航| 国产一级精品aaaaa看| 欧美一区免费| 欧美成人乱码一二三四区免费| 久久久久国产精品麻豆| 亚洲精品视频在线观看免费视频| 日韩一区二区在线看| 91涩漫在线观看| 国产精品欧美亚洲777777| 免费视频国产一区| 久久成人免费观看| 成人一级视频在线观看| 欧美成人精品激情在线视频| 欧美精品欧美精品系列| 91吃瓜网在线观看| 国产国语刺激对白av不卡| 亚洲区小说区图片区qvod按摩| 国产精品国产亚洲精品看不卡| 国产精品原创巨作av| 小泽玛利亚一区| 91麻豆精品国产91久久久久| 麻豆传媒免费在线观看| 91久久中文字幕| 亚洲mv大片欧洲mv大片| 中文字幕亚洲影院| 中文字幕一区二区三区蜜月| 亚洲视频久久久| 精品久久久999| 91麻豆精品一二三区在线| 欧美日韩亚洲国产成人| 国产精品一区二区在线观看不卡| 欧美第一页在线观看| 日韩欧美中文一区二区| 国产嫩草在线视频| 国产精品久久久久久免费观看| 在线看片欧美| 丰满少妇一区二区三区| 91成人国产精品| 免费a在线看| av在线不卡观看| 在线视频精品| 少妇人妻好深好紧精品无码| 欧美视频在线不卡| 麻豆电影在线播放| 国产传媒一区| 久久一日本道色综合久久| 日本精品在线观看视频| 欧美男生操女生| 狂野欧美性猛交xxxxx视频| 久久久久久高清| 日本中文字幕一区| 欧美日韩精品一区二区三区视频播放| 精品久久久久久无| 黑人巨大精品| 亚洲一区在线免费| 国产成人自拍网| 三级视频在线观看| 日韩在线观看免费高清完整版| 99re8这里有精品热视频免费| 激情综合在线观看| 国产精品久久久久久久久晋中| 成人1区2区3区| 日本亚洲欧洲色| 88国产精品视频一区二区三区| 亚洲高清无码久久| 欧美性极品少妇| 性xxxfreexxxx性欧美| 欧美日韩免费高清| 激情成人午夜视频| 97久久久久久久| 久久久91精品国产| 日韩三级毛片| 青娱乐国产精品视频| 日韩欧美一区二区三区| 18av在线播放| 四虎影视永久免费在线观看一区二区三区 | 精品精品久久| 美女日批在线观看| 在线观看不卡视频| 操喷在线视频| 日本特级黄色大片| 国产日韩精品一区二区三区在线| 精品黑人一区二区三区国语馆|