1. 程式人生 > >web應用打包成桌面可執行程式

web應用打包成桌面可執行程式

本教程旨在幫助開發人員把web應用程式打包成一個可執行的桌面應用程式,並生成一個安裝包setup.exe,直接安裝到本地電腦,方便使用者使用。

1、背景

開發web專案時,大多數選擇主流的chrome等瀏覽器作為開發除錯工具,但終端使用者可能要求相容IE等不常用的瀏覽器,此時如果重新開發需要耗費很大的人力、物力。針對此種情況,可以考慮把web應用程式打包成一個桌面應用程式,既方便使用者使用,又不用考慮瀏覽器的相容問題。

2、名詞解釋

本文中所用到的名詞術語和名詞縮寫的解釋如表1-1所示。

                                                                                               表1-1 名詞解釋

術語/縮寫

定義

nw

node-webkit


3、nw打包web應用

把web應用程式打包成桌面應用程式並最終生成一個安裝包exe基本流程為:【使用node-webkit把web應用打包成桌面可執行應用exe】—>【使用reshacker修改exe的版本資訊、logo等內容】—>【使用inno把可執行的桌面應用exe程式打包成安裝包exe】。

開發人員可以到nw官網下載nw程式,考慮到最終打包的桌面應用程式可能執行在32位機器或者64位機器上,下載nw的32位和64位程式,分別打包32位桌面應用程式和64位桌面應用程式。

下載後解壓,其目錄結構如下圖所示。


nw是作者編譯好的nw.exe來啟動的,nw根據程式描述檔案package.json來啟動主頁面載入到webkit核心中,預設的解壓後沒有package.json檔案。因此,我們需要建立配置檔案package.json來設定我們web應用程式,如下圖所示。

其基本內容如下:
{
  "main": "http://www.abc.com",
  "name": "測試",
  "description": "測試",
  "version": "1.0",
  "keywords": [ "abc", "abc" ],
  "window": {
    "title": "測試",
	  "icon": "abc.png",
    "toolbar": true,
    "frame": true, 
    "width": 1300,
    "height": 768,
    "position": "center",
    "min_width": 1200,
    "min_height": 600
  },
  "webkit": {
    "plugin": true
  },
  "chromium-args":"--incognito"
}
其中幾個比較重要的屬性:
 main: web應用程式的主頁面,這裡我們配置的是web應用部署伺服器的地址,當部署伺服器改變時,可以修改此地址。
 name: 應用程式的名稱
 window: 主要描述桌面應用程式的視窗資訊,title屬性描述視窗的名稱,nw.exe啟動後,右鍵工作列中的桌面應用程式可以看到修改後的名稱。icon修改桌面應用程式的圖示,修改後可以在工作列中看到修改後的圖示。

4、使用reshacker修改nw.exe資訊

雖然nw.exe根據配置檔案package.json以桌面應用形式來執行web程式,但是程式在工作管理員中的程序名、程序icon、版本資訊等都還是nw.exe資訊。可以使用reshacker把nw.exe相應的資訊修改為web應用程式的資訊,例如程序名、程序icon等等,使得生成的桌面應用程式更加專業,其具體操作流程如下。

1、使用reshacker開啟nw.exe


2、在圖示組中替換exe執行時程序的icon


3、在版本資訊中修改exe的版本資訊


4、修改完畢點選【另存為】,命名exe應用程式為系統名,例如:test.exe,刪除nw.exe。再次執行時工作管理員中的資訊、exe屬性資訊等就都改變了。

3、使用inno打包成安裝包exe

完成上面的操作之後,雖然可以以桌面應用程式的方式執行web程式,但是對於使用者來說體驗還是不好,必須拷貝整個解壓後的nw資料夾,然後點選執行新生產的test.exe才能使用。為了方便使用者使用,使用inno把修改配置後的test.exe打包成一個安裝程式setup.exe,使用者直接下載安裝包安裝到本地電腦上使用。

4、注意事項

使用inno打包生成安裝後安裝到本地執行,由於登陸頁面的密碼輸入框型別為password,每次登陸之後,webkit核心預設的都會記住使用者名稱、密碼。再次開啟執行時會自動填充登陸歷史記錄的使用者名稱及密碼,顯然這導致使用者密碼不安全。

解決辦法:

修改密碼輸入框type為text,通過js程式設計實現對密碼輸入密文顯示。