一、cef3內核的下載
可以從http://opensource.spotify.com/cefbuilds/index.html下載,注意:很多版本編譯都可以通過 但是運行的時候會崩潰,以cef_binary_3.2704.1414.g185cd6c_windows32為例,該版本debug編譯都可以通過,運行的時候加載本地網頁會出現錯誤,原因未知,加載www.baidu.com,關閉的時候會出現崩潰的情況,release版本完全正常,
二、使用cmake創建成vs工程
本文創建為vs2015,
打開vs工程文件,,編譯libcef_all_wrapper,另外編譯自帶cefsimple,從libcef_dll_wrapper文件下的生成目錄debug或者release獲取libcef_dll_wrapper.lib,另外要把cefsimple需要的依賴都拷出來,后面作為我們demo必要的依賴。
三、cef相關文件夾介紹
文件夾介紹
(1)cmake,該文件夾包含Cmake的一些宏定義,配置信息。
(2)include,使用該庫的所有頭文件
(3)libcef_dll,庫的源代碼
(4)tests,測試程序demo源代碼
(5)Resource,資源文件
該資源文件是程序運行需要依賴的資源文件,含語言包,unicode支持等
(6)Debug/Release,程序依賴的動態庫/靜態庫。但不包括C++庫:libcef_dll_wrapper.lib。
1、必須文件,缺少任意一個CEF將無法運行:
libcef.dll
這個不用多說,CEF的核心庫文件,js引擎、網頁加載渲染邏輯等都在其中,也是size最大的一個文件(Release版將近50M,Debug版超過500M)。
icudtl.dat
用來支持unicode,缺少這些文件雖然編譯能通過,但是執行CefInitialize();的時候就會崩潰,在這個坑趴了很久還以為是代碼問題。
natives_blob.bin
snapshot_blob.bin
V8引擎快照數據。
2、可選文件:
locales/
該目錄包含CEF,Chromium和Blink使用的本地化資源。 CefSettings.locale指定需要加載的.pak文件。 只需要發布配置的區域對應的.pak文件。
如果沒有區域設置將配置默認語言環境“en-US”。如果沒有這些文件任意Web組件可能顯示不正確。
cef.pak
cef_100_percent.pak
cef_200_percent.pak
這些文件包含了供CEF使用的區域無關資源,缺少這些文件任意Web組件可能顯示不正確。(筆者當時缺少cef_100_percent.pak,
cef_200_percent.pak兩文件,導致視頻控件不顯示音量和最大化按鈕)。
cef_extensions.pak
此文件包含擴展加載所需的非本地化資源傳遞`--disable-extensions`命令行標志來禁止使用文件。沒有這個文件,依賴於擴展系統的組件將不起作用,如PDF查看器。
devtools_resources.pak
此文件包含Chrome開發者工具所需的非本地化資源,缺少這個文件,Chrome開發者工具將無法運行。
d3dcompiler_43.dll (Windows XP需要該文件)
d3dcompiler_47.dll (Windows Vista和更高版本的系統需要該文件)
libEGL.dll
libGLESv2.dll
Direct3D支持文件,如果缺少這些文件,HTML5在渲染2D畫布,3D CSS,WebGL時將不起作用。
wow_helper.exe
用來支持Windows Vista 64位沙箱。如果沒有這個文件,32位的CEF將無法在開啟了沙箱的64位的Vista機器上運行。
四、測試demo的創建
1、創建mfc對話框工程,將cef_sandbox.lib、libcef.lib、libcef_dll_wrapper.lib拷到項目中,並添加相應依賴,將源碼中的include文件夾添加到項目中。
2、將本人上傳的的文件資源http://download.csdn.net/download/venice0708/10272163下載並添加到工程中,作為后面c++調用js和JS調用c++的依賴。
3、創建CTestWeb繼承IWebEventCallBackBase。
4、在BOOL CnewCef3DemoDlg::OnInitDialog(),添加
關閉的時候需要調用GetCefInstance()->ExitInstance();
五、c++調用js
在本人的依賴中有 GetCefInstance()->RunJS(pTestWeb->GetWebID(), L"sendMessage", 1, JsDataStr.GetBuffer());
第一個參數為該網頁的ID號,第二個為js的函數名,第三個為總的參數個數,第四個為參數,詳情請看源代碼。
六、JS調用c++
在上文的依賴代碼中需要進行c++函數的注冊
在js代碼中只需要CallWkeWebkit("CCjsCallCpp", "666");即可,詳細的可以參照一些網友的做法。
本文只要是寫了一些項目中研究的大體思路,方便以后查閱,類似的博文網上很多,詳細可以參考其他網友的!
from:https://blog.csdn.net/venice0708/article/details/79461129