前一篇文章裡,分析了包括NW.js和electron這種純JS架構在内的幾種Web桌面應用開發方式,實際上還有一種最古老的方式,那就是嵌入WebView的方式。
嵌入WebView的方式和整個程式都是WEB視窗不同,僅在視窗的部分子視窗使用WebView,和原生UI或DirectUI結合的方式。
這種在C/C++程式裡嵌入WebView的方式,由于沒有一種公認、通用的架構或方法,基本是最困難和最原始的方式蠻幹,或者自研平台,難以公開。但是也有很多效果很棒,很著名的軟體。那麼下面我們來細數一下這些桌面應用。
一、HTMLayout與sciter
HTMLayout是Web桌面應用平台裡面的資深者。不開源,很小,不到1M大小(應該是加殼壓縮了,實際3M多)。應該是作者原創的HTML引擎。一開始限制很多,後繼者sciter強大了很多。6M大小。支援全平台開發,包括APP。因為不開源,是以網絡影響不是很大,都是企業使用者使用。
HTMLayout與sciter有一堆大名鼎鼎的使用者,國内的有遨遊maxthon浏覽器,搜狐和360等。
二、QQ:
最新版的QQ裡面,帶了libcef3.dll,不到30M的體積,剪裁得不錯。控制腳本用得是Lua。
資料打了包,在包裡有XML,HTML,LUA。看來是DirectUI和WEB混合開發。在頁面中使用WebCtrl,混合使用。
<UI>
<Window name="MedalWall" config="MedalWallWndConfig" location="50, 50" clientAreaSize="700,470" titleText="$@this:MedalWallWndCaption" fixSize="true" showMaxButton="false">
<!--<WebCtrl config="webkit" sizeAsParent="true" name="MedalWallPage" />-->
<Frame size="700,470">
<background>
<Brush clrFrom="0xFFFFFFFF"/>
</background>
</Frame>
</Window>
</UI>

三、豌豆莢
豌豆夾裡帶了libcef.dll,大概38M大小,也帶了lua51.dll,不過現在還51是不是有點過時了,lua5.2 5.3都有很大的改進。
豌豆夾以前開源的OneRing項目也沒有了下文,程式裡也看不到OneRing的痕迹了,應該是改頭換面了。
資源打了包。其全部頁面都不支援右鍵菜單,應該都是WEB的。雖然沒有使用混合界面,但和C++程式結合緊密,應該也還是有些貨的。
四、酷狗
有意思是的,酷狗的libcef.dll改名為infra.dll,40M大小
酷狗的資源打包成獨立檔案,XML格式,估計是DirectUI與Web結合的方式
<Forms>
<OnekeyBackupPrompt Name="OnekeyBackupPrompt" RelativePosition="0,0,0,0" Anchors="left,top,right,bottom">
<Image Name="OnekeyBackupPromptBackground" Anchors="left,top,right,bottom" RelativePosition="-20,-20,-20,-20" Bitmap="PlaylistAddMark.png"/>
<Image Name="OnekeyBackupPromptLogo" Anchors="" RelativePosition="0,-34,122,70" Bitmap="onekey_backup_animation.png"/>
<Label Name="OnekeyBackupPromptTips" Anchors="" RelativePosition="-30,27,90,16"/>
<Label Name="OnekeyBackupPromptCancel" Anchors="" RelativePosition="51,28,52,16"/>
</OnekeyBackupPrompt>
</Forms>
在“AppData\Roaming\KuGou8\WebCache”目錄裡,發現有解壓後的資源,的确是HTML頁面,證明使用了Web應用技術。
隻是各個版本的垃圾資源資訊能不能清理一下,難怪越來越大。
在“AppData\Roaming\KuGou8\AppStore”目錄發現在程式裡面有sciter32.dll,看來也是sciter的使用者。
五、Duilib,soui2,DuiVision與WKE
Duilib,soui2,DuiVision是國内著名開源DirectUI庫,裡面都内置了WKE引擎。
WKE是基于WebKit的精簡,優點是足夠小,11M大小。但是缺點是夠老和BUG多。
因為相關開源庫的DirectUI技術本身就是與WEB桌面應用相似的技術,基于XML開發界面。
是以很少人用WKE開發WEB桌面應用,基于WKE的WEB桌面應用還處在比較原始的階段。
WKE的傳送門GitHub - BlzFans/wke
而号稱史上最小chromium核心的miniblink,已經開源了,不知道如何。
作者比較活躍,給個傳送門吧:GitHub - weolar/miniblink49
總結:
Web桌面應用架構總得來說,要麼難,要麼弱,要麼限制多。
雖然前端一直在推崇JS全棧,但是我覺得還是多語言配合更有利。
理想中的架構要這樣:核心算法能編譯+能與GUI架構結合+WEB隻負責界面部分+有開源實作
golang+libui+cef+http+新架構,可能是個不錯的結合。
(完)