cef支援各種語言和多種作業系統。在設計的時候充分考慮了效能和易用性。cef核心功能提供了c和c++的介面。cef提供了和主程式之間的通訊能力(利用 custom plugins, protocols,javascrpit object 和 javascript extensions)。主應用程式可以選擇性的使用控制 資源的載入,切換, context menus, printing等。
依賴
- chromium
- webkit
- v8
- skia
- angle
執行緒注意事項
CEF執行緒有如下幾種
typedef enum {
TID_UI,
TID_DB,
TID_FILE,
TID_FILE_USER_BLOCKING,
TID_PROCESS_LAUNCHER,
TID_CACHE,
TID_IO,
TID_RENDERER,
} cef_thread_id_t;
在使用執行緒的時候需要注意如下幾點:
- 千萬不要阻塞UI執行緒
- UI執行緒會任務是主執行緒,當 CefSettings.multi_threaded_message_loop = false的時候。
- 所有的webkit和V8的互動必須用 TID_RENDERER執行緒
- CefPostTask 方法可以再不同執行緒中進行非同步呼叫
介面
- CefApp,此介面用來傳遞到CefInitialize(),和允許應用程式定製全域性,如資源載入,代理。這些功能是由所有程式共享的,有些必須實現瀏覽器的過程中,必須在渲染過程中執行。見詳情標頭檔案的註釋。
- CefClient,此介面用來傳遞到CefCreateBrowser() or CefCreateBrowserSync(),和充當單獨CEF Browser事例和客戶端應用程式的連線,也負責請求和顯示處理的介面。請求處理,顯示處理等額外的介面,通過這個介面暴露。
- CefBrowser,公開由瀏覽器提供的功能。包括前進後退導航,來源檢索,載入請求等,一個CefBrowser可能有一到多個子類的CefFrame物件。在一個特定的過程或一個特定的執行緒必須呼叫一些方法,所以仔細閱讀文件。
- CefBrowserHost - 公開有關執行browser程式中唯一可用的browser視窗的功能。例如,檢索本地父視窗控制程式碼,或銷燬browser視窗。
CefRenderProcessHandler - 公開WebKit和V8對渲染程式中應用程式的整合能力。通過CefApp返回此物件的一個例項。
程式注意事項
CEF3使用了很多不同的程式:
- Broser process- 這個程式可以認為是應該程式的主程式,當呼叫CefInitialize()的時候建立
- Render process- web容器(webkit和v8)在此程式中執行
- plugin process- 外掛(如 Flash)
- GPU process-GPU渲染程式
- Utility process- 各種其他任務在這個程式中跑。
CefBrowser 和 CefFrame 在browser和render程式中都存在,並且傳遞一系列callbacks。 CefProcessMessage能夠在browser進中利用CefBrowser::SendProcessMessage 函式發出, 並且在CefClient::OnProcessMessageRecieved 和CefRenderProcessHandler::OnProcessMessageRecieved 接收。
重要的細節
CEF3 有如下幾個比較重要的類:
- CefMainDelegate - 用於普通程式的邏輯過程
- CefContentClient- 在普通程式 展現Content Api的回撥。
- CefContext-在browser程式中,展現全域性的CEF上下文。 一個單獨的CefContext物件時由CefInitialize()建立,有CefShutdown銷燬。
- CefBrowserMainParts- browser 程式的邏輯
- CefContentBrowserClient-在browser 程式展現Content Api的回撥。
- CefBrowserHostImpl-是CefBrowserHost 的實現
- CefContentRendererClient- 在render 程式中展現Content Api的回撥
- CefBrowserImpl- CefBrowser的實現者