本書是一本同時介紹 Electron和 NW.js的圖書,這兩者是目前流行的支持使用 HTML、CSS 和 JavaScript 進行桌面應用開發(fā)的框架。書中包含大量的編碼示例,而且每個示例都是五臟俱全的實用應用,作者對示例中的關鍵代碼都做了非常詳細的解釋和說明,可讓讀者通過實際的編碼體會使用這兩款框架開發(fā)桌面應用的切實感受。除此之外,在內(nèi)容上,本書非常系統(tǒng),分為4大部分:第1部分介紹兩個框架的歷史背景,并教大家編寫*個桌面應用,讓讀者對這兩個框架有一個初步的感受;第 2部分深入講解 NW.js和 Electron 的內(nèi)部工作原理,幫助大家剖析這兩個框架的底層機制,讓讀者對它們有更深入的理解;第 3部分介紹使用框架提供的大量 API 來構建多款實用的桌面應用,全方位地讓讀者體會使用這兩個框架開發(fā)桌面應用帶來的舒適體驗;第 4部分為大家講解了,當開發(fā)完成后,如何對應用進行測試、跨平臺打包和發(fā)布。可以說這 4部分結合起來將開發(fā)桌面應用的整個流程系統(tǒng)化地講解得非常清楚、到位。相信結合書中大量的示例,讀者一定能很快掌握并自己使用 Electron和 NW.js構建出跨平臺的桌面應用。
傳統(tǒng)桌面應用開發(fā)要求懂高級編程語言以及專門的框架。有了Electron和NW.js,你可以將現(xiàn)有Web開發(fā)技術運用到僅僅使用HTML、CSS和JavaScript就能開發(fā)的桌面應用中。而且,開發(fā)出來的應用還能在Windows、Mac和Linux中工作,顯著減少了開發(fā)和培訓的時間。
本書一步步指導你使用Electron和NW.js來進行桌面應用開發(fā)。這份指導中包含了大量的示例,教你如何開發(fā)一個屬于你自己的文件瀏覽器,介紹使用框架提供的API來訪問攝像頭、剪貼板數(shù)據(jù),制作可以用鍵盤控制的游戲以及構建一個Twitter桌面提醒工具。你還會學到如何測試和調(diào)試應用,以及為不同操作系統(tǒng)將應用打包為二進制文件。
本書包含的內(nèi)容
□ 使用桌面攝像頭創(chuàng)建一個自拍應用
□ 學習如何使用Devtron來測試Electron應用
□ 學習如何在你的應用中使用Node.js
譯者序
Stack Over.ow 的聯(lián)合創(chuàng)始人 Jeff Atwood 說過一句非常經(jīng)典的話: Any application that can be written in JavaScript, will eventually be written in JavaScript,翻譯過來就是:任何能使用 JavaScript 來編寫的應用,最終都會用 JavaScript 來實現(xiàn)。這句話被譽為 Atwood 定律。事實上,這句話正在不同領域被一次一次地驗證。以前 JavaScript 只是運行在瀏覽器沙箱環(huán)境中的腳本語言,而自從 2009 年 Node.js 問世后,JavaScript 在服務器端、物聯(lián)網(wǎng)領域、移動原生應用開發(fā)領域,乃至桌面應用開發(fā)領域都大放異彩。
以往要開發(fā)桌面應用,針對 Windows、Linux 以及 Mac OS 三大平臺要專門去學習各自平臺的編程語言和框架,成本高昂而且要做一款支持兼容三種平臺的桌面應用非常費時,基本都需要針對不同平臺的不同團隊才能實現(xiàn)。就我個人而言,幾年前我一直想學習 Objective-C 以及 Cocoa 來開發(fā) Mac OS X 桌面應用,但是始終沒有成功。現(xiàn)如今, JavaScript 讓這一切都變得無比簡單。一名 Web 開發(fā)者就能開發(fā)出兼容三大操作系統(tǒng)的桌面應用。不僅大大降低了學習曲線,而且開發(fā)效率可以說呈指數(shù)級提升。這要歸功于 NW.js 和 Electron 這兩款目前最流行的使用 Web 技術開發(fā)桌面應用的開發(fā)框架。這兩款框架將 Chromium 和 Node.js 非常好地結合起來, Chromium使得 Web 開發(fā)技術能夠在桌面應用中得以施展, Node.js則提供了訪問操作系統(tǒng) API 的能力,兩者的結合使得使用 JavaScript 開發(fā)桌面應用成為可能。
目前, NW.js 和 Electron 這兩款框架在全世界各大公司被廣泛使用。近幾年紅遍全球的 Slack就是使用 Electron 來開發(fā)他們的桌面應用的,國內(nèi)阿里巴巴的企業(yè)應用釘釘桌面應用,就是用 NW.js 來開發(fā)的,除此之外,全球范圍內(nèi)越來越多的桌面應用都在采用這兩種框架進行開發(fā)。
本書是一本專門介紹如何使用 NW.js 和 Electron 框架來開發(fā)桌面應用的書。在國內(nèi),目前本書應該是第一本同時介紹 NW.js 和 Electron 開發(fā)桌面應用的圖書。而且本書內(nèi)容非常系統(tǒng),從框架的背景介紹、教你開發(fā)第一款桌面應用、深入剖析框架內(nèi)部原理、通過豐富的示例應用介紹框架提供的多個 API,再到應用的測試、調(diào)試、跨平臺打包、構建和最終的發(fā)布,涵蓋整個開發(fā)到發(fā)布流程中的所有環(huán)節(jié)。而且本書的每一章中都有大量的實用示例,通過實際的編碼讓你感受使用 NW.js 的 Electron 開發(fā)桌面應用的體驗。書中每個示例應用都會分別介紹 NW.js 和 Electron 兩個版本如何實現(xiàn)、過程中需要注意的地方有哪些,非常有實踐價值。總的來說,本書不論是對于初學者還是有一定經(jīng)驗的開發(fā)者,都是一本相當好的學習使用 NW.js 和 Electron 開發(fā)桌面應用的圖書。
最后,非常感謝電子工業(yè)出版社計算機出版分社的張春雨編輯對我的信任,將這本書交給我來翻譯;感謝本書的責任編輯劉舫對本書的辛苦付出;還要感謝本書的原作者 Paul B. Jensen,翻譯過程中遇到模棱兩可的地方,通過 Twitter 聯(lián)系他,他都能及時回復我,并給予詳細的解釋。
翻譯和寫書一樣,都是需要花費大量精力和時間的事情,自從翻譯完上一本《了不起的 Node.js》后,我就對自己說我再也不會干翻譯圖書的事情了,實在是太累了。但是,當出版社編輯找到我,給我看了原版樣書后,我還是沒忍住,因為雖然過程很累很苦,但是在書出版的那一刻,除了自己小小的虛榮心能夠得到一點滿足,更多的是一想到可以幫助到很多學習使用 NW.js 和 Electron 開發(fā)桌面應用的開發(fā)者,就覺得非常自豪,再累再苦都是值得的!當然,翻譯過程中難免會有錯誤的地方,也希望大家能夠多多指正!
謹以此書獻給在背后默默支持我的家人,特別是我的兩個孩子 木木和一一,希望你們能夠健康快樂地成長,爸爸愛你們!
Goddy Zhao 2017 年 12 月 12 日于上海
推薦序
Electron 框架誕生于 2013 年,那個時候 Node.js 才剛剛流行起來。整個社區(qū)因 JavaScript 能夠在客戶端和服務器端運行而興奮不已,并且也在嘗試使用 JavaScript 來開發(fā)桌面應用。
我個人也對 JavaScript 技術很熱衷,而且 GUI 編程是我比較喜歡的領域。我自己寫過一些 Node.js 的模塊,這些模塊對主流的 GUI 工具提供了 JavaScript 的綁定,不過都做得一般,也沒有引起太多關注。
之后我發(fā)現(xiàn)了一個非常有趣的 Node.js模塊,叫作 node-webkit:這個簡單的模塊可以實現(xiàn)在 WebKit 瀏覽器中插入執(zhí)行 Node.js 代碼。于是我有了一個點子,可以用它來開發(fā)一個具備完整功能的客戶端開發(fā)框架:我可以用 Chromium 來顯示 Web 頁面,就像桌面窗口一樣,然后其他的都用 Node.js 來控制!
當時 node-webkit 的開發(fā)并不活躍,于是我接手了這個項目并進行重寫,將它打造成一個完善的用于桌面應用開發(fā)的框架。當我完成第一版的時候,它可以用于開發(fā)小型的跨平臺應用,效果奇好!
與此同時, GitHub正在秘密開發(fā)一款基于 Web技術的 Atom編輯器,而且他們非常希望可以有一個更好的工具來替代目前 Atom不盡如人意的 Web運行時。 GitHub曾嘗試將 Atom遷移到 node-webkit,但是遇到了很多問題。我和他們的開發(fā)者碰了面并且最終我們達成一致:由我來開發(fā)一款新的框架,讓開發(fā)者使用 Node.js
技術和瀏覽器相關技術就可以開發(fā)桌面程序,然后再幫他們把 Atom遷移過來。
這款新的框架起初命名為 atom-shell;一年后,在正式開源的時候將其改名為 Electron。Electron是從零開始開發(fā)的,并且使用了和 node-webkit完全不同的底層架構,它可以讓開發(fā)者開發(fā)大型且復雜的桌面端應用。(如今, node-webkit交由其他開發(fā)者在維護開發(fā),項目狀態(tài)也比較活躍。它現(xiàn)在叫 NW.js,使用也很廣泛。)
因為使用 Electron可以既簡單又快速地構建出復雜的跨平臺應用,所以它得到了許多開發(fā)者的關注,發(fā)展也很迅速。現(xiàn)如今,許多大公司都基于 Electron 開發(fā)了他們的桌面端產(chǎn)品,除此之外,小型創(chuàng)業(yè)公司也圍繞這個平臺在構建他們的業(yè)務。
使用 Electron 和 NW.js 開發(fā)桌面應用要求開發(fā)者掌握一些新的概念。桌面應用開發(fā)和前端程序開發(fā)截然不同,對于初學者來說也更難。不過本書可以幫助到大家。
本書將帶你一覽 Electron 和 NW.js 豐富的 API、教你如何開發(fā)桌面應用。你會學到許多使用 JavaScript 開發(fā)桌面應用的技術細節(jié),包括如何構建和分發(fā)應用,以及如何將現(xiàn)有應用集成到桌面應用中的一些深度小技巧。本書還涵蓋了一些高級話題,如調(diào)試、分析以及在不同平臺發(fā)布應用,哪怕是有經(jīng)驗的開發(fā)者也可以從中學到不少東西。
我建議所有想要開發(fā)桌面應用的讀者都來閱讀本書。讀完后你會驚訝于使用 JavaScript 和 Web 技術來進行跨平臺的桌面應用開發(fā)是一件多么簡單的事情。
Cheng Zhao Electron框架開發(fā)者
序言
幾年前我在一家叫 Axisto Media 的公司工作時,我們需要為一個健康行業(yè)大會開發(fā)一款桌面應用,用來展示大會的視頻、議題信息以及海報。當時這款應用是用 Adobe AIR 開發(fā)的。但是開發(fā)過程并不容易,而且客戶需要進行一些操作才能讓應用在他們的計算機中運行起來。好在我們后來找到了更好的解決方案。
我大概從 2013 年年底開始學習 NW.js(那個時候它叫 node-webkit)。我發(fā)現(xiàn)使用 NW.js 開發(fā)的桌面應用客戶用起來更方便,因為他們不再需要安裝 Adobe Flash 播放器,也不用把應用文件放到 U 盤里來加載。他們只需雙擊應用就可以運行了。不僅如此,我們還能提供 Linux版本,而且其技術棧和我們的業(yè)務本身的技術棧很契合,因為我們在其他地方也都使用 Node.js 技術。
我抓住了機會,使用 NW.js 去重新構建這款桌面應用并且摒棄一切,勇往直前。 NW.js 讓一切都變得更加簡單,這得益于它可以從大會網(wǎng)站的 Web 應用重用 HTML、 CSS和 JS代碼,我們可以讓桌面應用看上去樣式更加統(tǒng)一。這是一個巨大的好處。
我當時對這個框架非常滿意,于是決定在 2014 年 6 月的倫敦 Node.js 用戶組聚會上進行分享。后來我就把演示稿放到了網(wǎng)上。幾個月后,我發(fā)現(xiàn)這個演示稿在 SlideShare 網(wǎng)站上很快被查看了 20 000次。這太棒了,我以為這事就這樣了。
然而并沒有。
2014 年 12 月,我收到了一封來自 Manning 出版社 Erin Twohey 的電子郵件,他問我是否有興趣寫一本關于 node-webkit 的書。這簡直太棒了,我立刻就投入到這本書的寫作中。
那段時間發(fā)生了很多事情。Node.js 社區(qū) fork 了 Node.js 項目并命名為 IO.js,他們加快了平臺新特性的開發(fā),后來 IO.js 項目又合并回了 Node.js項目。 node-webkit 框架切換到了 IO.js,并且由于它使用了 Blink 而非 WebKit,因此改名為 NW.js。一年過去了,本書的寫作也臨近尾聲,就在這個時候,我們發(fā)現(xiàn)了另外一個可以用 Node.js 開發(fā)桌面應用的框架,叫 Electron。仔細一看,我發(fā)現(xiàn) Electron 和 NW.js 很像,而且它的作者以前就是開發(fā) NW.js 的。于是我們決定將 Electron 也寫到本書中。
寫一本書同時涵蓋兩種 Node.js 桌面應用開發(fā)框架是一個挑戰(zhàn),不過最終還是完成了。本書涵蓋了使用 NW.js 和 Electron 開發(fā)桌面應用的基礎知識。盡管本書沒有面面俱到地介紹這兩個框架,但是足夠讓你了解它們的大部分特性以及如何使用的知識,這樣你就可以根據(jù)你的需求,選擇其中一個框架來構建桌面應用。
對于開發(fā)者來說這是一個很好的時代,有了像 NW.js 和 Electron 這樣的工具,構建桌面應用變得再簡單不過。我希望你喜歡這本書,如果對于這兩個框架有問題想問我的話,可以通過我的電子郵箱 paulbjensen@gmail.com 或者通過我的 Twitter賬號 @paulbjensen聯(lián)系我。
Paul B. Jensen
致謝
寫書是非常艱難的項目之一,它需要投入大量的時間和精力。同時,還需要不少人的協(xié)助。我要感謝的人很多,他們都或多或少幫助過我。首先我要感謝 Manning 出版社負責本書的團隊: Erin Twohey、Ana Romac、 Candace Gillhoolhey、Rebecca Rinehart、Aleksandar Dragosavljevic、Toni Bowers、
ˊMehmed Pasic、Karen Gulliver、Katie Tennant、Janet Vail 以及 Lynn Beighley。促成本書的工作量之大是你難以想象的,在此過程中他們都極力幫助我完善本書。我還要感謝技術審校 Clive Harber 和以下這些審校人員: Angelo Costa、Daniel Baktiar、 Darko Bozhinovski、Deepak Karanth、Fernando Monteiro Kobayashi、Jeff Smith、 Matt Borack、Nicolas Boulet-Lavoie、Olivier Ducatteeuw、Patrick Regan、Patrick Rein、Robert Walsh、Rocio Chongtay、Stephen Byrne、Toni La.. hdekorpi、William Wheeler、Yogesh Poojari 以及 Marcelo Pires;同時感謝 Natko Stipanicˇ ev 在圖片方面提供的幫助。
感謝 Marjan Bace 給我寫作本書的機會。能為 Manning寫書是一種榮譽;我的書架上有不少 Manning出版社的書,現(xiàn)在他們的書架上多了一本我的書。還要感謝 Michael Stephens 在寫書之初幫助我制訂了本書的大綱、感謝他在面對我各種拖稿的時候能夠妥善處理、感謝他當我遇到個人困難的時候給予理解。
感謝我的開發(fā)編輯Cynthia Kane。她完成了最困難的工作激勵我完成每一個章節(jié)的內(nèi)容。這是我的第一本書,你可以想象這個過程有多么痛苦。我有一份電子郵件歸檔,里面包含超過 150封郵件,這些都是她在我寫書階段發(fā)給我的,那個時候我在倫敦、阿姆斯特丹、愛爾蘭、意大利、紐約,然后又到阿姆斯特丹,最后又回到倫敦。在非常困難的 2016 年,Cynthia 始終耐心地激勵我將本書完成,而且盡管有時區(qū)問題,她都能及時地提供支持和幫助。萬分感激,謝謝 Cynthia。
感謝 Roger Wang和 Cheng Zhao開發(fā)了 NW.js 和 Electron沒有他們的努力,這本書壓根就不可能存在。
感謝在倫敦 Starcount 的 Edwina Dunn 和 Clive Humby,很榮幸可以和他們共事,非常感激他們給予我的支持。
感謝 Purple Seven 的 Stuart Nicolle。Stuart 當年帶我入職并帶我領略了如何從藝術和戲劇分析世界中收集有用的信息。
感謝我的家人:我的母親 Jette、妹妹 Maria 和她的伙伴 Mark,已故的 Gran Lis 以及 Brenda 和 Jim。他們撫育我成人、在我人生道路上為我披荊斬棘。
我還想特別感謝 Fiona。她容忍了我寫書過程中的一切,甚至更多。本書能夠成功出版和她對我的支持和愛是分不開的。
最后我還想提一下我的父親 Wily,他是一名硬件和軟件工程師,非常聰明卻又不好相處。雖然我們從未正眼看過對方,但還是要感謝有這樣一位父親。
關于代碼
本書包含諸多示例代碼,有標明序號的多行代碼,也有直接在正文中的單行代碼。不論是哪種形式,代碼都是以等寬字體的形式來表示的,以此來和正文進行區(qū)分。大多數(shù)情況下,源代碼都是格式化過的;為了適應書頁的空間添加了必要的換行和縮進。除此之外,當有專門解釋源代碼的文字時,代碼注釋通常就被去掉了。一般在多行代碼以及高亮顯示的重要概念時會有代碼注解。
本書中的示例代碼可以通過出版社網(wǎng)站 www.manning.com/books/cross-platform-desktop-applications或 GitHub的 http://github.com/paulbjensen/cross-platform-desktop-applications 下載得到。
作者在線
購買本書之后,讀者可以免費訪問 Manning 出版社的私有論壇,在那里,可以對本書進行評論、提問技術問題,作者和論壇中的其他用戶都會給予解答。要訪問和訂閱該論壇,請訪問 www.manning.com/books/cross-platform-desktop-applications。
讀者服務
輕松注冊成為博文視點社區(qū)用戶(www.broadview.com.cn),掃碼直達本書頁面。
提交勘誤:對書中內(nèi)容的修改意見可在提交勘誤處提交,若被采納,將獲贈博文視點社區(qū)積分(在你購買電子書時,積分可用來抵扣相應金額)。
與我們交流:在頁面下方讀者評論處留下疑問或觀點,與我們和其他讀者一同學習交流。
頁面入口: http://www.broadview.com.cn/33474
Paul Jensen 是英國倫敦一家名為 Starcount 公司的高級售前顧問。他曾在創(chuàng)業(yè)公司工作過,網(wǎng)路代理商 New Bamboo ( 現(xiàn)在屬于 Thoughtbot),AOL, 以及他自己的咨詢公司,Anephenix Ltd。他在一些大會(倫敦 Ruby 用戶組,2013 年的Cukeup 以及 倫敦用戶組)上做過演講,創(chuàng)建了他自己的實時儀表盤(Dashku),也曾是 web 框架 Socketstream 的項目帶頭人。他喜歡麥芽酒和騎行,他的推特賬號是:@paulbjensen。
本書譯者中英文水平都極高,且工作在編程第一線,具有豐富的理論知識和實踐經(jīng)驗,此前翻譯過圖書,相信能為大家?guī)硪槐举|(zhì)量上乘的圖書。
第1部分 歡迎來到.Node.js.桌面應用開發(fā)的世界
第1章 Electron和NW.js入門 .3
1.1 為什么要用.Node.js.構建桌面應用.4
1.1.1 桌面應用到.Web.應用,再回到桌面應用 .4
1.1.2 Node.js.桌面應用相比.Web.應用有什么優(yōu)勢 .6
1.2 NW.js.和.Electron.的起源 .8
1.3 NW.js.介紹 .9
1.3.1 使用.NW.js.構建.Hello.World.應用 .10
1.3.2 NW.js.有哪些特性.15
1.4 Electron.介紹 .18
1.4.1 Electron.是如何工作的以及它和.NW.js.的區(qū)別是什么 .19
1.4.2 使用.Electron.開發(fā).Hello.World.應用 .19
1.4.3 Electron.有哪些特性.25
1.5 NW.js.和.Electron.支持創(chuàng)建哪類應用 .25
1.5.1 Slack .26
1.5.2 Light.Table .26
1.5.3 Game.Dev.Tycoon .27
1.5.4 Gitter .28
1.5.5 Macaw .29
1.5.6 Hyper .30
1.6 小結 .31
第2章 為你的首款桌面應用搭建基礎架構.32
2.1 我們將構建什么應用 .33
2.2 創(chuàng)建應用 .34
2.2.1 安裝.NW.js.和.Electron.34
2.2.2 為.NW.js.版本的應用創(chuàng)建文件和文件夾 .35
2.2.3 為.Electron.版本的應用創(chuàng)建文件和文件夾 .37
2.3 實現(xiàn)啟動界面 .39
2.3.1 在工具條中展示用戶個人文件夾信息 .40
2.3.2 顯示用戶個人文件夾中的文件和文件夾 .44
2.4 小結 .54
第3章 構建你的首款桌面應用 .56
3.1 瀏覽文件夾 .57
3.1.1 重構代碼 .57
3.1.2 處理對文件夾的雙擊操作.61
3.2 實現(xiàn)快速搜索 .64
3.2.1 在工具條中增加搜索框.65
3.2.2 引入一個內(nèi)存搜索庫.65
3.2.3 在界面上觸發(fā)搜索功能.67
3.3 改進應用內(nèi)的導航功能 .71
3.3.1 實現(xiàn)當前文件夾路徑可單擊 .71
3.3.2 讓應用隨著文件夾路徑的改變顯示對應的文件夾內(nèi)容 .74
3.3.3 實現(xiàn)使用默認應用打開對應的文件 .75
3.4 小結 .77
第4章 分發(fā)你的首款桌面應用 .79
4.1 對應用進行與分發(fā)相關的設置.80
4.2 對要分發(fā)的應用進行打包.83
4.2.1 使用一種.NW.js.的構建工具 .83
4.2.2 使用一種.Electron的構建工具 .84
4.2.3 設置應用的圖標 .85
4.3 在多個操作系統(tǒng)中測試應用.91
4.3.1 Windows.操作系統(tǒng).91
4.3.2 Linux.操作系統(tǒng) .92
4.3.3 Mac.OS.系統(tǒng) .92
4.4 小結 .92
第2部分 深度剖析
第5章 在NW.js和Electron中使用Node.js.97
5.1 什么是.Node.js .98
5.1.1 同步與異步 .98
5.1.2 流是一等公民 .101
5.1.3 事件 .105
5.1.4 模塊 .106
5.2 Node.包管理器 .109
5.2.1 尋找應用需要的模塊.109
5.2.2 使用.package.json記錄安裝的模塊 .109
5.2.3 使用.npm.打包模塊和應用.111
5.3 小結 .114
第6章 探索NW.js和Electron的內(nèi)部機制.115
6.1 NW.js.內(nèi)部是如何工作的 .116
6.1.1 使用同一個.V8.實例.117
6.1.2 集成主事件循環(huán) .118
6.1.3 橋接.Node.js.和.Chromium.的.JavaScript.上下文 .119
6.2 Electron.內(nèi)部是如何工作的.119
6.2.1 libchromiumcontent.介紹.120
6.2.2 Electron.中的組件.120
6.2.3 Electron.是如何將應用運行起來的 .121
6.3 Node.js是如何與NW.js以及Electron一起工作的 .122
6.3.1 Node.js.集成在.NW.js.的哪個位置 .122
6.3.2 在.NW.js中使用.Node.js.的缺點 .123
6.3.3 Electron.是怎么使用.Node.js.的 .123
6.4 小結 .124
第3部分 精通Node.js桌面應用開發(fā)
第7章 自定義桌面應用的外觀.127
7.1 視窗的尺寸和模式 .127
7.1.1 配置.NW.js.應用的視窗尺寸 .128
7.1.2 配置.Electron.應用的視窗尺寸 .129
7.1.3 在.NW.js.中限制視窗的尺寸 .131
7.1.4 在.Electron.中限制視窗的尺寸 .133
7.2 無邊框應用以及全屏應用.134
7.2.1 NW.js.中的全屏應用.135
7.2.2 Electron.中的全屏應用.138
7.2.3 無邊框應用 .140
7.2.4 kiosk.應用 .145
7.3 小結 .149
第8章 創(chuàng)建托盤應用 .150
8.1 使用.NW.js.創(chuàng)建簡單的托盤應用.151
8.2 使用.Electron.創(chuàng)建托盤應用.156
8.3 小結 .159
第9章 創(chuàng)建應用菜單以及上下文菜單.161
9.1 為應用添加菜單 .162
9.1.1 應用視窗菜單 .162
9.1.2 使用.NW.js.為.Mac.OS的應用創(chuàng)建菜單 .162
9.1.3 使用.Electron.為.Mac.OS的應用創(chuàng)建菜單 .163
9.1.4 為.Windows.和.Linux的應用創(chuàng)建菜單 .166
9.1.5 基于操作系統(tǒng)來選擇渲染具體的菜單 .173
9.2 上下文菜單 .174
9.2.1 使用.NW.js.創(chuàng)建上下文菜單 .174
9.2.2 NW.js.中的上下文菜單是如何工作的 .179
9.2.3 設置菜單項圖標 .180
9.2.4 使用.Electron.創(chuàng)建上下文菜單 .181
9.2.5 使用.Electron.添加上下文菜單 .184
9.3 小結 .185
第10章 拖曳文件以及定制界面.186
10.1 在應用中拖曳文件 .186
10.1.1 使用.NW.js.實現(xiàn)在應用中拖曳文件 .187
10.1.2 使用.Electron.實現(xiàn)拖曳功能 .190
10.2 模擬操作系統(tǒng)原生樣式.191
10.2.1 檢測用戶的操作系統(tǒng).191
10.2.2 使用.NW.js檢測操作系統(tǒng) .191
10.2.3 使用.Electron檢測操作系統(tǒng) .192
10.2.4 使用.CSS匹配用戶操作系統(tǒng)的樣式 .194
10.3 小結 .197
第11章 在應用中使用網(wǎng)絡攝像頭.198
11.1 使用.HTML5.媒體捕捉.API.來實現(xiàn)相片快照 .198
11.1.1 解讀.NW.js.版的應用.199
11.1.2 使用.Electron.構建.Facebomb.應用 .205
11.2 小結 .210
第12章 存儲應用數(shù)據(jù) .211
12.1 應該使用哪種數(shù)據(jù)存儲方案.211
12.2 使用.localStorage.API.存儲便箋數(shù)據(jù) .212
12.2.1 使用.Electron開發(fā).Let.Me.Remember應用 .213
12.2.2 使用.NW.js開發(fā).Let.Me.Remember應用 .216
12.3 將待辦事項應用移植為桌面應用 .219
12.3.1 使用.NW.js.移植.TodoMVC.Web.應用 .219
12.3.2 使用.Electron.移植.TodoMVC.應用 .220
12.4 小結 .222
第13章 從剪貼板復制和粘貼數(shù)據(jù).223
13.1 訪問剪貼板數(shù)據(jù) .223
13.1.1 使用.NW.js.創(chuàng)建.Pearls.應用 .224
13.1.2 使用.Electron.創(chuàng)建.Pearls.應用 .228
13.1.3 使用.Electron.將不同類型的數(shù)據(jù)寫入剪貼板 .231
13.2 小結 .232
第14章 綁定鍵盤快捷鍵 .233
14.1 使用.NW.js.創(chuàng)建貪吃蛇游戲.234
14.1.1 使用.NW.js.在視窗獲取焦點的時候實現(xiàn)鍵盤快捷鍵 .242
14.1.2 使用.NW.js.來創(chuàng)建全局鍵盤快捷鍵 .243
14.2 使用.Electron.為貪吃蛇游戲創(chuàng)建全局快捷鍵 .245
14.3 小結 .247
第15章 制作桌面通知 .248
15.1 關于你要構建的應用 .249
15.2 使用.Electron.構建.Watchy.應用.249
15.3 使用.NW.js.構建.Watchy.應用.254
15.4 小結 .257
第4部分 準備發(fā)布
第16章 測試桌面應用 .261
16.1 測試應用的不同方法 .262
16.1.1 測試驅動開發(fā) .262
16.1.2 行為驅動開發(fā) .264
16.1.3 不同層面的測試.265
16.2 單元測試 .265
16.2.1 使用.Mocha.編寫測試.266
16.2.2 讓待完成的測試變成執(zhí)行通過的測試 .268
16.3 功能測試 .271
16.3.1 功能測試實踐 .272
16.3.2 使用.NW.js.和.ChromeDriver.進行測試 .272
16.4 使用Spectron測試Electron應用.273
16.5 集成測試 .275
16.5.1 Cucumber.介紹.276
16.5.2 使用.Cucumber和.Spectron對.Electron應用進行自動化測試.277
16.6 小結 .280
第17章 調(diào)試并提升應用性能 .281
17.1 了解你要調(diào)試的是什么.282
17.1.1 確定問題根本原因的位置 .283
17.1.2 使用瀏覽器開發(fā)者工具進行調(diào)試 .284
17.2 修復.bug .287
17.2.1 使用.Node.js.的調(diào)試器來調(diào)試應用 .288
17.2.2 使用.NW.js.的開發(fā)者工具來調(diào)試應用 .291
17.3 解決性能問題 .296
17.3.1 Network選項卡.296
17.3.2 Timeline選項卡.297
17.3.3 Pro.les選項卡.299
17.4 調(diào)試.Electron.應用 .301
17.5 小結 .307
第18章 為多平臺打包應用 .308
18.1 為應用創(chuàng)建可執(zhí)行文件.309
18.1.1 為.Windows.系統(tǒng)創(chuàng)建.NW.js.應用的可執(zhí)行文件 .309
18.1.2 安裝虛擬機 .309
18.1.3 為一個.NW.js應用創(chuàng)建針對.Windows系統(tǒng)的.exe文件.310
18.1.4 為一個.Electron.應用創(chuàng)建.Windows.系統(tǒng)的可執(zhí)行文件 .311
18.2 為.Windows.的應用創(chuàng)建啟動安裝器 .314
18.2.1 使用.NW.js.創(chuàng)建.Windows.系統(tǒng)啟動安裝器 .314
18.2.2 使用.Electron創(chuàng)建.Windows系統(tǒng)啟動安裝器 .321
18.3 為.Mac.OS.創(chuàng)建.NW.js.應用的可執(zhí)行文件 .324
18.3.1 創(chuàng)建.Mac.可執(zhí)行應用.324
18.3.2 為.Mac.OS.創(chuàng)建.Electron.應用的可執(zhí)行文件 .327
18.4 為.Linux.創(chuàng)建可執(zhí)行應用.329
18.4.1 為.Linux.創(chuàng)建獨立的.NW.js.應用文件 .330
18.4.2 為.Linux.創(chuàng)建獨立的.Electron.應用文件 .331
18.5 小結 .333
附錄A 安裝.Node.js .335