將webkit內核封裝為duilib的瀏覽器控件


轉載請說明出處,謝謝~~


         原本的duilib是自帶瀏覽器控件的,但是使用了IE內核,我在做仿酷狗音樂播放器時,在右側樂庫要用到瀏覽器控件,而我使用自帶的IE控件卻發現了不少缺點,這也是duilib一直沒有解決的,編程群里的朋友也反映IE控件不好用。而目前最常用的瀏覽器內核一個是IE內核,另一個是webkit內核。

            先簡單介紹一下這個webkit內核
            WebKit 是一個開源瀏覽器引擎,與之相對應的引擎有Gecko(Mozilla Firefox 等使用)和Trident(也稱MSHTMLIE 使用)。同時WebKit 也是蘋果Mac OS X 系統引擎框架版本的名稱,主要用於SafariDashboardMail 和其他一些Mac OS X 程序。WebKit 前身是 KDE 小組的 KHTML,WebKit 所包含的 WebCore 排版引擎和 JSCore 引擎來自於 KDE 的 KHTML 和 KJS,當年蘋果比較了 Gecko 和 KHTML 后,仍然選擇了后者,就因為它擁有清晰的源碼結構、極快的渲染速度。Apple將 KHTML 發揚光大,推出了裝備 KHTML 改進型 WebKit 引擎的瀏覽器 Safari。
             
WebKit 內核在手機上的應用也十分廣泛,例如 Google 的手機Android、 Apple 的 iPhone, Nokia’s Series 60 browser 等所使用的 Browser 內核引擎,都是基於 WebKit。
WebKit是開源的Web瀏覽器引擎,蘋果的Safari、谷歌的Chrome瀏覽器都是基於這個框架來開發的。WebKit 還支持移動設備和手機,包括iPhone和Android手機都是使用WebKit做為瀏覽器的核心。 
            可以看到webkit的前景非常不錯,谷歌和蘋果的各個產品,包括現在流行的安卓和IOS系統,他們的瀏覽器都才用webkit內核,大有取代IE內核的意思。而且webkit是開源免費的!
            昨天我在網上搜索了webkit的相關產品,先是著名的cef,下載下來以后發現他編譯后40M大,功能很強大,當然用起來比較復雜,查閱了相關資料,嘗試封裝了一下,但是發現難度較大。而且40M對於我這樣只為了顯示網頁的需求來說太大了。如果是為了專門制作個瀏覽器,那么使用cef是很不錯的。
            然后我下載EAWebkit,這個內核是基於webkit的精簡封裝,編譯后只有3M大,用起來簡單,但是和群里的朋友交流后得知這個內核不穩定,還存在較多bug,所以我也果斷放棄了。
            最后四方打聽,知道了這個wke內核,這個內核是國人
BlzFans發布的開源免費內核,一個相當好的代碼,在此先感謝BlzFans的工作!
            這個wke內核是為了在3D游戲中嵌入網頁和flash而開發的,支持最新的HTML5和CSS3技術,兼容性和速度都不錯。
            今天花了一上午把這個內核封裝為了duilib的瀏覽器控件,效果如下。 



            封裝起來還是挺順利的,有自帶的win32demo,了解了他的工作過程,使用這個內核很簡單,一個頭文件,一個庫文件,一個dll,只有這個3個文件。我在duilib里,仿照了CRichEditUI的封裝過程。制作了CWkeWebkitUI控件作為瀏覽器控件。這個CWkeWebkitU控件繼承了CControlUI控件,來更好的兼容duilib,然后在控件內部我封裝了CWkeWebkitWnd類,CWkeWebkitU控件初始化時會建立CWkeWebkitWnd類,這個CWkeWebkitWnd類會使用Createwindow函數先建立一個子窗體,並且使用了WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN樣式,WS_CHILD讓這個新建的窗體成為主窗體的子窗體,然后添加WS_CLIPSIBLINGS | WS_CLIPCHILDREN樣式,這兩個樣式很關鍵,他可以讓主窗體刷新時不去刷新子窗體,否則不加這個樣式,就會因為主窗體頻繁的刷新導致瀏覽器控件的卡頓。解決了核心問題,然后就是處理webkit內核的消息,仿照了原代的demo,我把各個消息處理后,就封裝好了這個控件,並且增加了幾個簡單的接口來方便外部的調用。
            結束,休息一下~~

2014.7.25  15:50  Redrain

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM