有朋友的朋友找我做個小“頁面”,一開始對接需求沒說清楚,我就寫了個html文檔。交付時,才知道對方想要一個桌面應(yīng)用程序。
于是就想找尋下工具,看有沒有辦法把已有的html頁面轉(zhuǎn)化成一個exe程序。
從參考文章1里發(fā)現(xiàn)有三種方法:HTMLRunExe 工具、hta文件、nwjs工具。
我只嘗試過其中的 hta 和 nwjs,并且最終采用了nwjs工具。所以此處只比較下這兩種方法。
1 轉(zhuǎn)成hta文檔
hta,是html applilcation的縮寫。翻譯過來就是html應(yīng)用程序。
實現(xiàn)方式也很簡單。
- 新建一個文本文檔,重命名為hta后綴名,比如
test.hta; - 然后用文本編輯器在里面編寫一個
iframe標(biāo)簽,把我們的目標(biāo)網(wǎng)頁地址帶入到其src屬性中;
<iframe src="你的網(wǎng)頁地址" style="width:100%;height:100%"></iframe>
- 雙擊
test.hta即可。
打開hta文件的窗口界面
優(yōu)點:實現(xiàn)簡單。
缺點:不兼容h5、css3,而且JavaScript腳本也很容易出問題。
2 nw.js工具
nw.js的使用流程:
-
測試可用
解壓下載包后,雙擊nw.exe,可以正常啟動,則說明可以使用node-webkit。
nw.exe
-
- 構(gòu)建自己的項目.
比如,此處要把index.html頁面變成.exe程序。
則需要引入index.html頁面和package.json文件。
其中,package.json相當(dāng)于是配置文件,配置項如下:
- 構(gòu)建自己的項目.
{
"main": "index.html", //入口
"name": "nw-demo",//字符串必須是小寫字母或者數(shù)字,可以包含"." 或者"_"或者"-" ,不允許帶空格,必須唯一
"description": "demo app of node-webkit",//描述
"version": "0.1.0",//版本
"keywords": [ "demo", "node-webkit" ],//關(guān)鍵字
"window": {//窗體配置
"title": "node-webkit demo", //窗體的標(biāo)題
"icon": "link.png",//窗體的ico圖標(biāo)
"toolbar": true,//是否要工具欄
"frame": false,//bool值。如果設(shè)置為false,程序?qū)o邊框顯示 也就是沒有系統(tǒng)默認(rèn)的關(guān)閉,最小化,全屏按鈕
"width": 800,//窗口的大小
"height": 500, //窗口的大小
"position": "mouse", //字符串。窗口打開時的位置,可以設(shè)置為“null”、“center”或者“mouse”。
"min_width": 400,//最小寬度
"min_height": 200,//最小高度
"max_width": 800,//最大寬度
"max_height": 600,//最大高度
"as_desktop" :false,//是否作為桌面背景窗口顯示
"resizable":false,//是否允許調(diào)整窗口大小
"always-on-top":true,//窗口是否置頂
"fullscreen":false,//是否全屏顯示
"show_in_taskbar":true,//是否顯示任務(wù)欄圖標(biāo)
"show":false, //如果設(shè)置為false,啟動時窗口不可見
"kiosk":false //是否使用kiosk模式。如果使用kiosk模式,應(yīng)用程序?qū)⑷溜@示,并且阻止用戶離開應(yīng)用
},
"webkit": {
"plugin": true,//bool值,是否加載插件,如flash,默認(rèn)值為false。
"java":false, //bool值 是否加載java applets
" page-cache":false //是否啟用頁面緩存
}
}
如果你只需要配置其中一兩項,當(dāng)然也可以寫簡單點,如下:
"name": "index-demo",
"main": "index.html", //入口
- 文件準(zhǔn)備
把上面的index.html和package.json放置到nw.js解壓的文件夾里面。
如果你的項目不是單文件index.html,那可以把所有文件放在一個文件夾里,比如mydemo。
但package.json必須和nw.exe同級,這時候就要注意配置項的
- 文件準(zhǔn)備
"main": "./mydemo/index.html"
注意:此處和參考文章2不同,文章2是package.json 和index.html在一個文件夾里面。但我按照它的方法,沒有辦法合成exe。最后測試時package.json和nw.exe同級,不需要合成(指令:copy /b nw.exe+app.nw app.exe),直接打開nw.exe即可。
- 被動模式啟動mydemo
(1)指令方式
(2)拖拽方式
把文件夾拖動到nw.exe上即可。
- 被動模式啟動mydemo
- nw.exe
由于package.json已經(jīng)配置好入口,此處再啟動nw.exe時,你會發(fā)現(xiàn),已經(jīng)直接指向index.html頁面了。
- nw.exe
至此,已經(jīng)成功了大半部分,但是這個nw.exe只能在當(dāng)前環(huán)境指向,換到其他目錄或者其他環(huán)境就不行了,因為其他目錄就找不到nwjs包內(nèi)依賴的文件。(→_→除非你就整個文件夾壓縮下,隨身帶著使用。)
- 使用 Enigma Virtual Box 打成獨立的可執(zhí)行的exe文件
萬能的網(wǎng)絡(luò),聰慧的人類,總是給人以希望??!我們有個工具 Enigma Virtual Box 可以做打包的工作。
在官網(wǎng)下載Enigma Virtual Box,然后傻瓜式安裝下;
(1)導(dǎo)入項目exe文件
(2)選擇輸出路徑
(3)添加default文件夾
(4)添加nwjs文件
(5)點擊process,等待生成。
- 使用 Enigma Virtual Box 打成獨立的可執(zhí)行的exe文件
3 小結(jié)
小缺陷:用newjs工具,可以完美生成一個exe程序,但文件刀削也不小,有200+M,實際上index.html才10KB。

補充:本次實驗和參考文章2有所出入,如果文章2的生成流程也是可以了,望大家留言探討。
參考文章:





