關於windows下使用webkit或chrome瀏覽器核心總結(***)
首先為什麼需要使用webkit或chrome瀏覽器核心?本人之前一直使用IE控制元件中的IE瀏覽器,對於簡單的開發已經夠用了,但是IE有它的詬病,特立獨行,對HTML5新特性相容性非常差,由於近期在研究HTML5以及2.5D和3D地圖相關技術,所以一開始就摒棄了使用IE核心的想法。關於windows下使用chrome瀏覽器核心或webkit核心,已經專研了好幾天,一直在碰壁,我相信也有不少網友也跟我一樣,查閱了幾天都沒有任何進展,下面我說說這幾天查閱資料遇到的問題:
(1)關於webkit或chrome相關原始碼都需要編譯,而且編譯環境相當複雜,很多時候按照文章流程走,要麼走不通,要麼出一連串解決不了的錯誤,最終心灰意冷,直到放棄(大多數搞windows開發的在編譯這塊都缺少相關經驗,不比linux開發員);
(2)能找到人家已經編譯好的webkit或chrome核心庫,但是不是最新的庫,很多都是2012年之前的,太老的,對於近幾年HTML5的飛速發展,我想那些陳舊的庫已經不再適用了。
我的目的很簡單,就是能夠使用webkit核心,在查閱的過程中發現chrome核心使用的就是webkit瀏覽器核心,它在webkit的基礎上進行的改善以及速度提升,增加了一些新特性。所以在查閱webkit庫無果的情況下,又繞回來查閱chrome瀏覽器核心,當然在chrome以及webkit查閱過程反覆了好幾次,到處都是碰壁,對於一個windows程式設計師來說,我們提供一個庫給其他人使用,最簡潔的方法就是提供標頭檔案、dll以及對應的lib,這就足夠了,所以我們也想能夠得到這樣的支援,但是往往不是如此,特別當前開源專案都是linux下面開發支援的比較多,然而,事實上對於我遇到的問題,估計其他人也遇到了,其他開源勇士也想到了這點,所以黃天不負有心人,在搜尋很多篇文章裡面找到了一個字眼libcef,然後通過該關鍵字,我才知道libcef就是windows開發員遇到我同樣問題之後,為我們做的莫大貢獻!
首先說道libcef,首先了解下chrome瀏覽器核心或者說CEF,CEF就是chrome embedded Framework也就是chrome可嵌入框架的縮寫,Chrome使用了Webkit的程式碼,繼承了Webkit的優良排版引擎,渲染頁面速度驚人。說道libcef它其實就是對ContentAPI的封裝(各位可以跟蹤進一步瞭解ContentAPI,libcef也存在部分缺陷,如果解決不了我們可以直接使用ContentAPI做自己瀏覽器),大大降低了我們使用chromium核心的難度。接下來,就說說關鍵部分,在使用libcef過程以及使用時遇到的各種問題:
(1)下載libcef。libcef至今有人一直在更新維護,所以不擔心使用的核心不是最新的,下載連結
根據系統情況下載32bit或64bit的原始碼,我第一次下載額32bit的原始碼有點問題(壓縮開啟就是一個沒有格式的檔案,不是資料夾,下載多次後才正確--可能是與伺服器下載或網路有關係)
開啟程式碼,樹形結構如下:
在Debug和Release有對應的lib庫和Dll,也有include標頭檔案庫以對應的Demon,但是!問題來了,他提供的庫缺少libcef_dll_wrapper庫,所以我們還需要編譯出來這個庫!真是有點扯淡!!沒辦法,要使用啊,那就比不可少的編譯該庫,原始碼有了,vs開發環境有了,但是沒有對應的project,我們如何使用現有的原始碼生成對應的project?還好有cmake工具http://pan.baidu.com/s/1geLALMF,安裝cmake工具,啟動開始選單中的cmake (cmake-gui)
在彈出的介面中
where is the source code: 選擇原始碼位置,也就是我們下載解壓後的跟目錄所在位置,我的根目錄為F:/cef_binary裡面就包含了cefclient、cefsimple等內容;
where to build the binaries: 選擇出的二進位制檔案存放目錄,我也選擇到E:\cef_binary_3.2743.1442.ge29124d_windows32根目錄然後點選config按鈕配置vs環境為visual Studio 9 2008,最後選擇Generate生成二進位制檔案,第一次可能會彈出預設的vs2008配置:
然後,點選一次生成即可,最後在根目錄下生成了cef.sln解決方案,我們用vs2008開啟該解決方案:
裡面包含幾個工程:
(1)ALL_BUILD總工程,編譯所有其他工程
(2)cefclientdemon例項
(3)cefsimpledemon例項
(4)libcef_dll_wraper封裝的庫
(5)zero_check未知,暫時不用
如圖所示:
我們編譯整個解決方案,發現4、5都編譯通過,生成了對應的libcef_dll_wraper.lib靜態庫,但是對應的Demon一個都編譯不通過(如果缺少stdint.h檔案請下載我的:http://pan.baidu.com/s/1i5dN449 放到vc90安裝目錄下即可),報libcef_string_utf8或16未找到,我不知道什麼情況,查詢網路找了n篇,其中有篇英文文章裡面就描述了libcef_dll_wraper依賴libcef.lib,需要連線進來才能編譯通過,我覺得奇怪,但是靜態庫是無法連線其他庫的,所以我覺得是兩個客戶端沒有找到libcef.lib,於是我用dependcy找到根目錄下的Release(如果為Debug編譯就找Debug),開啟提示No section find等錯誤,而且右側看不到改dll的任何介面,這個問題不僅僅是我遇到了,網路上的網友也遇到類似問題,他們大多還是沒有解決,我猜想的是該libcef.dll正在被cmake使用導致的,於是我關了cmake(反正都已經變成生成了project工程),重新將新解壓的Debug和Release目錄(包含了libcef.lib和相關dll的)覆蓋我的根目錄,然後重新清理編譯,終於編譯通過了!!!!!!(此時只能是realease,debug的有出現改問題)此時真想張口罵人!但是終於算是解決了libcef編譯問題了。(其後,我又去重試我的整個過程,發現該問題並不是這個引起的,應該它自動編譯導致的問題,轉而我去下載32bit的---這裡說明一下我第一次用64bit的,後來不行又重新下載了32bit的,32bit的編譯沒有問題,之前下載的32bit的也有問題哦!刪除所有專案)
接下來就是vs2008指定vc++目錄的標頭檔案(就是根目錄)以及庫檔案目錄(Debug或Release目錄以及libcef_dll_wraper.lib所在目錄),然後建立專案連線libcef.lib和libcef_dll_wraper.lib即可開始我們的chrome瀏覽器開發之旅了!
此次折磨好幾天,感覺需要連線一下linux下編譯開原始碼那套複雜過程,不然很多開源專案都用不了,慚愧!
最後,我使用的工具或庫下載連結如下集合如下:
(1)stdint.h標頭檔案,在標頭檔案非常有用,一般windows下都沒有該頭,但都需要使用該標頭檔案宣告,這是在做ffmpeg的時候儲存的,是通用的:http://pan.baidu.com/s/1i5dN449
(4)最後我編譯通過的生成了libcef_dll_wraper.lib靜態庫以及Demon能編譯通過不報錯的工程:http://pan.baidu.com/s/1dFG5v0l