CEF GeneralUsage

CEF GeneralUsage

簡介

Chromium Embedded FrameWork(CEF) 是一個基于 Chromium 的開源項目。它與 Chromium 的不同之處在于,Chromium 項目服務于 Chrome 瀏覽器;而 CEF 則是為第三方程序提供嵌入式瀏覽器框架。CEF 適用的場合有:

  • 在已有的本地程序中嵌入 支持 HTML5 的瀏覽器控件;
  • 創(chuàng)建一個輕量級的 "殼"程序,在此基礎上可以使用 Web 技術(shù)來進行 UI 開發(fā);
  • "離屏渲染", 例如在后臺加載一個很大的網(wǎng)頁,然后直接展示它,避免頁面在前臺加載很長時間;

CEF3 是 CEF 的最新版本,它基于 Chromium Content API 。

本文介紹了使用 CEF3 進行程序開發(fā)時所涉及的常見概念。

開始

二進制版本

要體驗 CEF,可以先從 這個頁面 下載二進制版本。下載完成后解壓,有以下幾個目錄:

  • cefclient : 包含了一個基于二進制 CEF 庫開發(fā)的示例程序 cefclient。這個程序使用了 CEF 的大部分功能;
  • cefsimple : 包含了一個基于二進制 CEF 庫開發(fā)的示例程序 cefsimple。這個程序只是使用 CEF 創(chuàng)建了一個瀏覽器窗口;
  • include : CEF 頭文件;
  • Debug/Release : 編譯好的 CEF 共享庫 libcef.dll 及其他必要的共享庫;
  • libcef_dll : 包含了用于生成 libcef_dll_wrapper.lib 靜態(tài)庫的代碼。使用了 CEF C++ API 的程序必須鏈接這個靜態(tài)庫。關(guān)于 "C++ Wrapper" 的內(nèi)容會在以后的章節(jié)介紹;
  • Resources : 資源文件夾。基于 CEF 開發(fā)的程序需要這些資源文件才能運行;

二進制版本需要編譯才能生成 cefclient.exe 和 cefsimple.exe, 編譯方法參考 Tutorial,或者直接查看根目錄的 CMakeList.txt 文件。

源代碼版本

也可以直接編譯 CEF 源碼。編譯方法參考 BranchesAndBuilding。

重要概念

正式開始之前,有幾個關(guān)于 CEF 的重要概念要先了解一下:

C++ Wrapper

libcef.dll 共享庫導出的是 C API。對于需要使用 C++ API 的程序來說,就需要使用 libcef_dll_wrapper 項目來做封裝。它會將 C API 封裝成 C++ API,然后將 API 鏈接到客戶端程序中。C/C++ API 之間的轉(zhuǎn)換層代碼是由 translator 工具自動完成的。

當然,直接使用 C API 也是可以的,具體內(nèi)容請參考 UsingTheCAPI

進程

CEF3 以多進程的形式運行。主進程(也被叫做 "browser" 進程)負責處理窗口創(chuàng)建、繪制、網(wǎng)絡訪問等操作,另外宿主程序的業(yè)務邏輯也運行在 browser 進程中;Blink 渲染、JavaScript 腳本執(zhí)行由另一種 "render" 進程負責,默認的 進程模型 會為每個站點創(chuàng)建一個 "render" 進程;其他類型的進程只在需要時創(chuàng)建,比如 "plugin" 進程用于運行插件(比如 Flash);"gpu" 進程用于處理 accelerated compositing。

默認情況下,主程序的可執(zhí)行文件會被多次調(diào)用,創(chuàng)建出多個獨立的進程,有的是 "browser" 進程,有的是 "render" 進程。程序通過命令行來區(qū)分自身代表的是哪種進程,進而執(zhí)行對應進程的操作。如果可執(zhí)行文件很大、加載很慢,也可以讓 非"browser"進程 通過另一個獨立的可執(zhí)行文件來創(chuàng)建。這種配置需要在 CefSettings.browser_subprocess_path variable 里進行設定,更多信息請參考接下來的 "Application Structure" 章節(jié)。

各個進程可以使用 Inter-Process Communication(進程間通信) 機制來交互。browser 和 render 進程里的程序邏輯,通過發(fā)送異步消息的方式來通信。

線程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自http://blog.csdn.net/qq295445028/article/details/79930...
    WebSSO閱讀 3,157評論 0 3
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運行的地址不確定 關(guān)于...
    SeanCST閱讀 8,138評論 0 27
  • 動態(tài)調(diào)用動態(tài)庫方法c/c++linuxwindows 關(guān)于動態(tài)調(diào)用動態(tài)庫方法說明 一、 動態(tài)庫概述 1、 動態(tài)庫的...
    KINGZ1993閱讀 14,203評論 0 10
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,820評論 11 349
  • 常聽到有人感慨或者咒罵這樣的教育制度多么不人性,多么殘害中國的人才。我卻總是覺得,中國教育的問題,固然教育制度有問...
    班卓閱讀 388評論 0 0

友情鏈接更多精彩內(nèi)容