SlideShare a Scribd company logo
相容於 node.js 的
網頁型桌面程式設計
( 使用 Electron.js 開發 )
陳鍾誠
2017 年 10 月 23 日
程式人《十分鐘系列》程式人《十分鐘系列》
本文衍生自維基百科
這年頭
● 大家的焦點好像都在《 APP 和網
站》,傳統的視窗程式愈來愈少人
關注了 ...
這種現象
● 和《手機興起,微軟衰落》
的大環境應該有密切的關係!
但是
●桌機上的《視窗程式》,終
究還是有需要的 ...
不過令人感到困擾的是
● 傳統微軟的 WinForm 已然過時,
微軟的 WPF 看來也快過時了,
但新的 Xamarin 又前途未卜 ...
開放原始碼的 Qt 視窗開發工具
● 感覺很強大
● 而且還支援 JavaScript/QML ,甚至可
以在 Android/iOS 上跑 …
● 但很可惜難以支援 Node.js 的 npm
套件 ...
對於已經把主力
●轉到 Node/JavaScript 的我
●不能使用 npm 套件的 Qt 似乎
沒有足夠的吸引力!
於是
●我把眼光轉到 electron.js
這個開發工具上 ...
這學期
●我就用 electron.js
來教視窗程式設計了。
當然
● 這是經過測試評估的結果 ...
到底
●甚麼是 electron.js 呢?
簡單的說
● Electron.js 就是一套可以讓你用
HTML/CSS/JavaScript 等 web 開發技術,來
開發桌面應用的工具
● 而且 Electron.js 和 node.js 幾乎完全
相容,幾乎可以使用全部的 npm 套件!
以下是 electron.js 的官網
https://electron.atom.io/
要使用 electron.js 開發視窗程式
●您首先必須安裝 node.js
–https://nodejs.org/
裝好後、使用 npm 指令
●安裝 electron.js
–npm install -g electron
安裝完畢之後
●就可以開始寫 electron.js
的專案程式了!
問題是
●怎麼開始寫呢?
這常常是現今學程式的人
●需要面對的第一個問題!
解決方法通常是
●上官網看看範例在哪裡
●然後下載來執行看看!
以下是 electron.js 的官網範例
執行範例後你會看到下列畫面
基本上只是個 Hello 程度的專案而已
● 其檔案列表如下:
讓我們詳細看看內容
首先看 package.json
這和 node.js 的 package.json 幾乎一模一樣
其中的 main 欄位指出了主程式是 main.js
如果您還不熟悉 node.js
可以參考另一篇十分鐘系列
https://www.slideshare.net/ccckmit/javascript-npm
當我們打入
●electron 《專案路徑》
–例如 : electron .
的時候,就會執行該主程式
在主程式 main.js 中
會用 loadURL() 函數載入網頁
於是我們就可以
●啟動《網頁型視窗介面》了
–像是範例中的 index.html
上述範例的 index.html 如下
注意這裡可以引入像
node.js 一樣的模組
( 這是和一般 HTML 不一樣的地方 )
該範例基本上只是用來顯示
Node/Electron/Chromium 的版本號而已
● 所以你才會看到下列畫面
現在
●你已經看完第一個範例了
但是
●應該還有很多疑問 ...
為了釐清這些疑問
●您可以下載我課程用的範例
課程範例網址如下
https://github.com/cccnqu/wp106a
請使用下列 git 指令取得範例
● git clone https://github.com/cccnqu/wp106a.git
然後、讓我們一個一個範例執行
第一個範例就是
剛剛的 Hello 等級範例
不過我把主程式 main.js 簡化了一下
看起來應該簡單清楚多了
接著讓我們看
範例 02-calculator
會寫網頁的應該已經猜到怎麼做的了
裡面用了 eval 來計算運算式
計算使用者輸入
的運算式欄位
接著是第三個範例 - 電子鐘
電子鐘主要用了 setTimeout 函數
讓時間可以每秒更新一次
第四個範例是翻譯系統
我們把一個小字典直接寫在程式裡面
但是以上這幾個範例
● 其實都只是瀏覽器就能做的事!
接下來才會碰到一些
● 原本瀏覽器不太方便做的事
像是
● 開關檔案
● 顯示對跨框選取檔案
● 印表機與 PDF 列印
● 抓取畫面並存檔
● 開很多網頁並互相通訊 …
所以接下來
● 讓我們開始看一些有使用到桌面功能
的範例程式 ...
首先是媒體播放程式 05-media
雖然看起來網頁也做得到
但是程式中用到了開檔對話框
dialog.showOpenDialog()
這是原本瀏覽器所不支援的功能
接著我們在 06-editor 範例中
同樣用對話框來製作開檔功能
而且開檔存檔功能
是放在《主功能表》上的
其功能表的程式碼如下
功能表裏還可以
輕易地掛入一些預設功能
然後我們在 06-editor/b 中
繼續延伸出《開新檔案》與《另存新檔》的功能
接著引入一個稱為 marked 的 npm 模組
marked 可以用來把 markdown 格式轉為 HTML
於是我們寫了一個 markdown 編輯器
利用 marked 將文件轉為 HTML 呈現
當然、執行這個程式前必須先安裝 marked
我們會在程式裡
用 marked 將 markdown 轉為 html
您除了可以做先前的檔案功能之外
● 還可以按滑鼠右鍵檢視開過那些檔案
並且可以點選超連結連到另一個檔案
當然也可以編輯 markdown 原始碼
然後進行檢視或存檔的動作
從 markdown 編輯器的範例中
● 您應該可以看到在 electron.js 中
使用 npm 模組是非常容易的事情!
接著讓我們再看幾個例子
像是自製瀏覽器
您可以使用 webview
這個特殊的 HTML 標記
然後加上對應的控制程式
就能完成
●一個內嵌瀏覽器了
接著是印表功能的範例
按下 print 時會出現列印視窗
您也可以儲存為 PDF 後檢視
然後再決定要不要印 ...
這些功能的程式碼也都不難
因為都內建在 electron.js 裏面了
然後也可以做抓取螢幕畫面的程式
主要程式碼片段如下
如果您想做個像《檔案總管》的程式
當然也是可行的
只是程式碼會比較長
這樣
● 我們就看完了不少 Electron.js 的
程式範例了
但是最後
●請您必須注意一件事 ...
Node.js
● 是單行程 Single Process 的架構
Electron.js
● 則通常不只包含一個 Process
Electron.js
● 其主程式為一個行程 ( 稱為 Main Process)
● 每個 BrowserWindow 載入網頁又是一個行
程 ( 稱為 Render Process)
Render Process
● 可以透過 remote 物件存取主行程的內容
也可以透過 ipc 互相通訊
透過 Electron.js
● 我們就可以輕易地寫出《網頁型的
視窗程式》
● 並且可以任意的存取 node.js 的
npm 套件或程式了。
這樣
● 原本使用 node.js 的朋友們
● 就可以輕易地寫出桌面程式了!
這就是我們今天的
●十分鐘系列!
希望您會喜歡!
我們下回見!
Bye Bye!

More Related Content

PDF
十分鐘讓程式人搞懂雲端平台與技術
PDF
用十分鐘決定要不要念大學《資訊工程系》
PDF
假如我是個大學資工系畢業生
PDF
最佳化問題的公理化方法
PDF
高橋流微積分
PDF
用十分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
PDF
怎樣才算是一個合格的資工系畢業生
PDF
用十分鐘瞭解《線性代數、向量微積分》以及電磁學理論
十分鐘讓程式人搞懂雲端平台與技術
用十分鐘決定要不要念大學《資訊工程系》
假如我是個大學資工系畢業生
最佳化問題的公理化方法
高橋流微積分
用十分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
怎樣才算是一個合格的資工系畢業生
用十分鐘瞭解《線性代數、向量微積分》以及電磁學理論

What's hot (20)

PDF
用JavaScript 實踐《軟體工程》的那些事兒!
PDF
西洋史 (你或許不知道但卻影響現代教育的那些事)
PDF
用十分鐘瞭解《如何避免寫出悲劇的 C 語言》
PDF
《計算機結構與作業系統裏》-- 資工系學生們經常搞錯的那些事兒!
PDF
如何設計電腦 -- 還有讓電腦變快的那些方法
PDF
對程式人有用的《幾何學》
PDF
用十分鐘瞭解 愛因斯坦的相對論
PDF
用十分鐘瞭解JavaScript的模組 -- 《還有關於npm套件管理的那些事情》
PDF
用十分鐘理解 《微分方程》
PDF
區塊鏈 (比特幣背後的關鍵技術) -- 十分鐘系列
PDF
用十分鐘瞭解 新竹科學園區的發展史
PDF
人工智慧與神經網路 (還有深度學習的進展)
PDF
為何學程式?
PDF
專為程式人寫的神經網路導論 (以反傳遞演算法為入門磚)
PDF
用十分鐘瞭解 《開放原始碼的世界》
PDF
用十分鐘欣賞《物理學公理系統的演化史》
PDF
用十分鐘搞懂 《資管、資工、電子、電機、機械》 這些科系到底在學些甚麼?
PDF
人工智慧與神經網路 (還有深度學習的進展)
PDF
軟體工程(總結篇)
PDF
那些年、我們還沒學會就已經過時的那些技術
用JavaScript 實踐《軟體工程》的那些事兒!
西洋史 (你或許不知道但卻影響現代教育的那些事)
用十分鐘瞭解《如何避免寫出悲劇的 C 語言》
《計算機結構與作業系統裏》-- 資工系學生們經常搞錯的那些事兒!
如何設計電腦 -- 還有讓電腦變快的那些方法
對程式人有用的《幾何學》
用十分鐘瞭解 愛因斯坦的相對論
用十分鐘瞭解JavaScript的模組 -- 《還有關於npm套件管理的那些事情》
用十分鐘理解 《微分方程》
區塊鏈 (比特幣背後的關鍵技術) -- 十分鐘系列
用十分鐘瞭解 新竹科學園區的發展史
人工智慧與神經網路 (還有深度學習的進展)
為何學程式?
專為程式人寫的神經網路導論 (以反傳遞演算法為入門磚)
用十分鐘瞭解 《開放原始碼的世界》
用十分鐘欣賞《物理學公理系統的演化史》
用十分鐘搞懂 《資管、資工、電子、電機、機械》 這些科系到底在學些甚麼?
人工智慧與神經網路 (還有深度學習的進展)
軟體工程(總結篇)
那些年、我們還沒學會就已經過時的那些技術
Ad

Similar to 相容於node.js的 網頁型桌面程式設計 (使用Electron.js 開發) (12)

PDF
用十分鐘瞭解 陳鍾誠的程式設計課 (採用JavaScript + C的原因)
PDF
20120524 App開發流程與小工具分享@UI Cafe
PDF
用十分鐘將你的網站送上雲端
DOC
完全用GNU/Linux工作
DOC
完全用GNU/Linux工作
PDF
初窺 Flutter 開發.pdf
PDF
Node.js 進攻桌面開發
PDF
最周刊第一期
PDF
用十分鐘瞭解 《JavaScript的程式世界》
PDF
The Rational Behind Implementing an Open Source OS for Universal Apps
PDF
用最潮的 Java script 盡情開發 kde qt 程式
PDF
《Linux运维趋势》2012年5月号 总第19期
用十分鐘瞭解 陳鍾誠的程式設計課 (採用JavaScript + C的原因)
20120524 App開發流程與小工具分享@UI Cafe
用十分鐘將你的網站送上雲端
完全用GNU/Linux工作
完全用GNU/Linux工作
初窺 Flutter 開發.pdf
Node.js 進攻桌面開發
最周刊第一期
用十分鐘瞭解 《JavaScript的程式世界》
The Rational Behind Implementing an Open Source OS for Universal Apps
用最潮的 Java script 盡情開發 kde qt 程式
《Linux运维趋势》2012年5月号 总第19期
Ad

More from 鍾誠 陳鍾誠 (20)

PDF
用十分鐘搞懂 λ-Calculus
PDF
交⼤資訊⼯程學系備審資料 ⾱詠祥
PDF
smallpt: Global Illumination in 99 lines of C++
PDF
區塊鏈 (比特幣背後的關鍵技術) -- 十分鐘系列
PDF
梯度下降法 (隱藏在深度學習背後的演算法) -- 十分鐘系列
DOCX
系統程式 -- 前言
DOCX
系統程式 -- 附錄
DOCX
系統程式 -- 第 12 章 系統軟體實作
DOCX
系統程式 -- 第 11 章 嵌入式系統
DOCX
系統程式 -- 第 10 章 作業系統
DOCX
系統程式 -- 第 9 章 虛擬機器
DOCX
系統程式 -- 第 8 章 編譯器
DOCX
系統程式 -- 第 7 章 高階語言
DOCX
系統程式 -- 第 6 章 巨集處理器
DOCX
系統程式 -- 第 5 章 連結與載入
DOCX
系統程式 -- 第 4 章 組譯器
DOCX
系統程式 -- 第 3 章 組合語言
DOCX
系統程式 -- 第 1 章 系統軟體
DOCX
系統程式 - 第二章
PDF
nand2tetris 舊版投影片 -- 第五章 計算機結構
用十分鐘搞懂 λ-Calculus
交⼤資訊⼯程學系備審資料 ⾱詠祥
smallpt: Global Illumination in 99 lines of C++
區塊鏈 (比特幣背後的關鍵技術) -- 十分鐘系列
梯度下降法 (隱藏在深度學習背後的演算法) -- 十分鐘系列
系統程式 -- 前言
系統程式 -- 附錄
系統程式 -- 第 12 章 系統軟體實作
系統程式 -- 第 11 章 嵌入式系統
系統程式 -- 第 10 章 作業系統
系統程式 -- 第 9 章 虛擬機器
系統程式 -- 第 8 章 編譯器
系統程式 -- 第 7 章 高階語言
系統程式 -- 第 6 章 巨集處理器
系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 4 章 組譯器
系統程式 -- 第 3 章 組合語言
系統程式 -- 第 1 章 系統軟體
系統程式 - 第二章
nand2tetris 舊版投影片 -- 第五章 計算機結構

Recently uploaded (20)

PPTX
3分钟读懂伦敦商学院毕业证LBS毕业证学历认证
PPTX
学校原版加利福尼亚大学戴维斯分校毕业证UCD毕业证原版一比一
DOCX
銀髮人才重返職場的心態調整與價值提升 銀髮再就業講座 掌握銀髮人才關鍵漸進式退休的運用-銀髮勞動力論壇 詹翔霖教授
PPTX
3分钟读懂滑铁卢大学毕业证Waterloo毕业证学历认证
PPTX
学校原版杜克大学毕业证Duke毕业证原版一比一
PPTX
3分钟读懂圣安德鲁斯大学毕业证StAnd毕业证学历认证
DOCX
孕經濟:月子中心產業發展現狀及未來策略探討 唯有與時俱進,不斷創新,才能在孕經濟浪潮中立於不敗之地。詹翔霖老師.docx
PPTX
3分钟读懂皇家艺术学院毕业证RCA毕业证学历认证
PPTX
3分钟读懂利物浦约翰摩尔大学毕业证LJMU毕业证学历认证
PPTX
模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板
PDF
想要安全提高成绩?我们的黑客技术采用深度伪装和多层加密手段,确保你的信息安全无忧。价格公道,流程简单,同时提供全面的信息保护和事后痕迹清理,让你轻松提升G...
PPTX
3分钟读懂贝尔法斯特女王大学毕业证QUB毕业证学历认证
PPTX
3分钟读懂南安普顿大学毕业证Soton毕业证学历认证
PPTX
《HSK标准教程4下》第15课课件new.pptx HSK chapter 15 pptx
PPTX
3分钟读懂曼彻斯特城市大学毕业证MMU毕业证学历认证
PPTX
3分钟读懂渥太华大学毕业证UO毕业证学历认证
PPTX
3分钟读懂曼彻斯特大学毕业证UoM毕业证学历认证
DOC
ATU毕业证学历认证,伍赛斯特大学毕业证毕业证书样本
PPTX
3分钟读懂佩珀代因大学毕业证Pepperdine毕业证学历认证
PPTX
学校原版佐治亚大学毕业证UGA毕业证原版一比一
3分钟读懂伦敦商学院毕业证LBS毕业证学历认证
学校原版加利福尼亚大学戴维斯分校毕业证UCD毕业证原版一比一
銀髮人才重返職場的心態調整與價值提升 銀髮再就業講座 掌握銀髮人才關鍵漸進式退休的運用-銀髮勞動力論壇 詹翔霖教授
3分钟读懂滑铁卢大学毕业证Waterloo毕业证学历认证
学校原版杜克大学毕业证Duke毕业证原版一比一
3分钟读懂圣安德鲁斯大学毕业证StAnd毕业证学历认证
孕經濟:月子中心產業發展現狀及未來策略探討 唯有與時俱進,不斷創新,才能在孕經濟浪潮中立於不敗之地。詹翔霖老師.docx
3分钟读懂皇家艺术学院毕业证RCA毕业证学历认证
3分钟读懂利物浦约翰摩尔大学毕业证LJMU毕业证学历认证
模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板
想要安全提高成绩?我们的黑客技术采用深度伪装和多层加密手段,确保你的信息安全无忧。价格公道,流程简单,同时提供全面的信息保护和事后痕迹清理,让你轻松提升G...
3分钟读懂贝尔法斯特女王大学毕业证QUB毕业证学历认证
3分钟读懂南安普顿大学毕业证Soton毕业证学历认证
《HSK标准教程4下》第15课课件new.pptx HSK chapter 15 pptx
3分钟读懂曼彻斯特城市大学毕业证MMU毕业证学历认证
3分钟读懂渥太华大学毕业证UO毕业证学历认证
3分钟读懂曼彻斯特大学毕业证UoM毕业证学历认证
ATU毕业证学历认证,伍赛斯特大学毕业证毕业证书样本
3分钟读懂佩珀代因大学毕业证Pepperdine毕业证学历认证
学校原版佐治亚大学毕业证UGA毕业证原版一比一

相容於node.js的 網頁型桌面程式設計 (使用Electron.js 開發)