CEF中文教程(google chrome瀏覽器控件) -- CEF簡介

官方主頁:  點擊打開鏈接


CEF簡介: 

   嵌入式Chromium框架(簡稱CEF) 是一個由Marshall Greenblatt在2008建立的開源項目,它主要目的是開發一個基於Google Chromium的Webbrowser控件。CEF支持一系列的編程語言和操作系統,並且能很容易地整合到新的或已有的工程中去。

  它的設計思想政治就是易用且兼顧性能。CEF基本的框架包含C/C++程序接口,通過本地庫的接口來實現,而這個庫則會隔離宿主程序和Chromium&Webkit的操作細節。它在瀏覽器控件和宿主程序之間提供緊密的整合,它支持用戶插件,協議,javascript對象以及javascript擴展,宿主程序可以隨意地控件資源下載,導航,下下文內容和打印等,並且可以跟Google Chrome瀏覽器一起,支持高性能和Html5 技術,


CEF指南:


指南:

  首先把這段代碼插入到窗口的創建函數裏面去:

  1. // Create an instance of our CefClient implementation. Various methods in the  
  2. // MyClient instance will be called to notify about and customize browser  
  3. // behavior.   
  4. CefRefPtr<CefClient> client(new MyClient());  
  5.   
  6. // Information about the parent window, client rectangle, etc.  
  7. CefWindowInfo info;  
  8. info.SetAsChild(...);  
  9.   
  10. // Browser initialization settings.  
  11. CefBrowserSettings settings;  
  12.   
  13. // Create the new browser window object asynchronously. This eventually results  
  14. // in a call to CefLifeSpanHandler::OnAfterCreated().  
  15. CefBrowser::CreateBrowser(info, client, "http://www.google.com", settings);  

這段代碼你可以在[test]文件夾下面的cefclient工程裏面看到。

文件結構:

  include -- 這個文件夾裏面放CEF客戶應用程序所需的頭文件

  libcef -- 此文件夾存放CEF的靜態庫

  libcef_dll -- 此文件夾CEF的動態拉鍊庫

  tests -- 此文件夾存放測試的例子

       cefclient -- 一個簡單的客戶程序

       unittests --  CEF界面單元測試


瀏覽器事件:


   應用程序通過調用CefBrowser和CefFrame的方法來處理瀏覽器控件事件:
       a.Back, Forward, Reload and Stop Load。控件瀏覽器的導航
       b.Undo, Redo, Cut, Copy, Paste, Delete, Select All.控件目標框架的選取
       c.Print。打印目標框架
       d.Get Source。以字符串的形式來獲取目標框架的HTML源碼
       e.View Source. 用緩存文件來保存目的框架的HTML源碼,並且用系統默認的文本查看器打開
       f.Load URL.加載特定的URL到目標框架
       g.Load String. 加載一個特定的字符串到目標框架,通過一個隨意指定的虛擬URL
       h.Load Stream. 加載一個特定的二進制文件到目標框架,通過一個隨意指定的虛擬URL
       i.Load Request, 加載一個特定的請求到目標框架
       j.Execute JavaScript: 在目標框架裏面執行一個特定的Javscript命令
       k. Zoom。 縮放特定框架的網頁內容

插入網景風格插件:

      CEF支持插入網景風格的插件,插入插件的動作跟正常插入基本動態鏈接庫的插件一樣,但是做爲一個單獨的Dll,必須通過容器來創建,並且要用CefRegisterPlugin()這個函數來註冊到系統裏面去。你要調用這個函數的話,你就得包含cef_nplugin.h這個頭文件。

JavaScript擴展:

    CEF支持能連接本地程序源代碼的Javascript擴展,演示程序你可以去看cef_v8.h進而的CefRegisterExtension()方法,還有CEFClient下面的演示例子,你如果想得到更多的信息,可以點下面的鏈接:  JavaScriptIntegration

用戶計劃:

    CEF支持註冊和處理像myscheme://mydomain一樣的用戶計劃,你可去查看cef_scheme.h裏面的CefRegisterScheme()和Scheme Handler測試單元,得到詳細的說明。


框架總覽:

   所有的文件前綴都是Cef


框架的建立和銷燬:

   CEF的UI消息寄宿在一個框架建立的單線程中,用戶只負責用CefInitialize()和CefShutdown()來建立和銷燬這個線程,但是你如果設置了CefSettings.multi_threaded_message_loop, 這個UI消息循環也可以運行在一個單獨的線程裏面。


引用計數:

   所有的框架數都從CefBase這個基類繼承而來,並且所有的實例指針都用CefRefPtr智能指針來管理,可以用AddRef()和Release()函數來自動處理引用計數。

平臺無關:

   CEF框架被設計成平臺無關的,現在它支持Windows,Mac os-x和Linux,爲了無縫地支持多種平臺,框架定義了一系列的平臺無關的接口和類型定義。


框架接口:

      CefBrowser是主要的瀏覽器窗口類,可以用靜態的函數CreateBrowser() 和CreateBrowserSync() 來創建一個新的瀏覽器窗口。
      CefFrame 代表一個瀏覽器窗口的框架,每個瀏覽器窗口有一個頂層的主框架,而這個主框架可以用GetMainFrame() 方法得到。
      CefClient是主瀏覽器窗口的代表接口,這個接口做爲參數傳遞給CreateBrowser()
      CefRequest 代表URL,方法,發送數據和頭文件等這樣的請求。
      CefSchemeHandleFactory 類是被用來處理像myscheme://mydomain類似客戶計劃的請求
      CefReadHandler和CefWriteHandle是一個讀寫數據的簡單接口。
      CefV8Handler,CefV8Value和CefV8Context是被用來創建和訪問JavaScript對象。

以上內容是Cef的簡介,後面我將翻譯怎麼編譯並生成一個用CEF控件來創建的一個簡單瀏覽器!



    這部分講解CEF的分支信息並介紹下載編譯和打包源代碼

背景:

      CEF項目是做爲Chromium的擴展項目而存在的,CEF跟Chromium一樣地維護兩個版本,開發版和發佈版。CEF源代碼既可以手動編譯,也可以用工具自動編譯

發展:

     CEF項目在不斷的發展中,你可以從這裏看到整個項目的文件trunk,因爲當前的版本緊跟Chromium,所以不推薦拿當前的版本來開發發佈版的產品。下面的鏈接可以用來下載CEF的開發版源碼:
     remind:你點開上面的鏈接時,你會發現這是一個svn工程的目錄,如果以前是用VSS的,你可能覺得svn很陌生,不要嘗試一個一個地去下載裏面的文件。這裏有個簡單的方法可以下載整個文件夾:先下載一個TortoiseSVN,下完後安裝,但是你不會看到有什麼的TortoiseSVN的運行程序,因爲它是內嵌到Windows裏面的,你應該在任意的盤符下面創建一個空的文件夾,右鍵點擊這個文件夾,點擊菜單項【TortoiseSVN】->【export】,在URL文件框裏面輸入上面的鏈接後點確定,然後現在個工程文件都會下下來。

發佈版:

     CEF隨着Chromium發佈版也提供一個最新的發佈版,推薦用戶用發佈版本做爲開發產品的環境,原因有如下幾點:
     1.二進制的CEF是用特定的Chromium發佈版編譯出來的
      2.發佈版的CEF/Chromium經過了更好的測試,而且更加適合開發發佈版的應用程序
      3.發佈版更加穩定
      4.CEF發佈版可以包含必要的Chromium/WebKit版本
      5.CEF以後的更新不會干擾用戶的發佈計劃

CEF版本號有如下形式:X.Y.Z,其中X是CEF主版本號,Y是發佈版版本號,而Z是CEF校對號,有關CEF和Chromium版本更詳細的內容,你可以去include/cef_version.h裏面找到,下面的表格列出當前的CEF發佈版本:
      
發佈版本 Chromium版本 CEF1支持性 CEF3支持性
963 17
1025 18
1084 19
1180 21
1271 23
1364 25
1453 26

你可以在下面的鏈接中下載發佈版的CEF, 其中YYYY是發佈版的版本號:

這裏值得注意的是版本963和1025是隻包含有CEF1的源代碼,要想了解CEF發佈版的版本號怎麼來的,你可以點擊旁邊這個鏈接: here

編譯源代碼:

    當前支持在Windows,Mac OS-X和Linux環境下編譯源代碼,而要想編譯成功,你的電腦必須至少有4GB的系統內存(因爲我用的Windows,所以在Mac或Linux環境下的要求我就沒有翻譯了)。
    在編譯Chromium和CEF源碼之前,你必須配置好你的編譯環境:

1.爲你的操作系統和開發環境安裝必要的包:

    Windows環境下點擊右邊的鏈接: http://www.chromium.org/developers/how-tos/build-instructions-windows(這個我將在下一章中給出譯文)
    配置好操作系統和編譯環境以後,還要用旁邊的鏈接去下載TortoiseSVN工具: http://sourceforge.net/projects/tortoisesvn/files/1.6.16/Application/

2.配置環境可以影響GYP

   CEF目前還不支持組件開發
   Windows - 如果你的操作系統裏面安裝了多個Virual Studio,你可以設置環境變量GYP_MSVS_VERSION爲一個適當的值,如果你想用VS2008來編譯工作,你應該把這個值設成2008,如果你想用Vs2010 Express來編譯工程,那你就應該把這個環境變量設成2010e, 如果是別的Visual Studio版本,那你就要去Chomium幫助文檔去查找更詳細的信息,但是估計也應該是同一個套路,假如你是vs2005,那肯定就是設成2005了。

自動的方法:

   CEF提供工具,用來自動下載、編譯、打包Chromium和CEF源代碼,這個方法對開發版和發佈版是同樣有用,你可以按下面的步驟來完成自動操作:

1.下載自動工具 automate.py:

   用SVN checkout下面的URL: 
<span class="pln">http</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="com" style="color: rgb(136, 0, 0);">//chromiumembedded.googlecode.com/svn/trunk/cef1/tools/automate /path/to/automate</span>

2.運行automate.py腳本:

   在任何合適的時間,你可以運行automate.py這個腳本(如每週每天每次CEF提交的時間),並使用你想要的CEF版本。
<span class="pln">python </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">automate</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">automate</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln">py </span><span class="pun" style="color: rgb(102, 102, 0);">--</span><span class="pln">download</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln">dir</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="str" style="color: rgb(0, 136, 0);">/path/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">download </span><span class="pun" style="color: rgb(102, 102, 0);">--</span><span class="pln">url</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln">http</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="com" style="color: rgb(136, 0, 0);">//chromiumembedded.googlecode.com/svn/branches/1084/cef1</span>

    如果這個操作成功了,一個二進制形式的包會被創建在  /path/to/download/chromium/src/cef/binary_distrib
如果你要想查找完整的使用介紹,點下面的鏈接:  automate.README.txt 
   這個方法也被完美地整合到了一些自動編譯系統如 TeamCity
(譯完這段我感到渾身冷汗,因爲什麼TeamCity、TortioseSVN...全都一無所知,想想從業也三四年了,卻離it這條路越走越遠,在上個公司呆的兩年多完全是封閉的兩年多,天天整些CAD,用寫好的API,做些重複的工作,什麼新的技術都沒學到,反而把老本都蝕完了,現在是時候奮起直追了。但轉念一想,我還能再追幾年,以我的年紀我還能追幾年? 學什麼走哪塊,才能讓我雖不說蒸蒸日上但卻能有口盒飯吃呢?)

手動下載:


    Chromium和CEF可以手動下載和編譯,但這更加複雜,所以不向所有用戶推薦。

開發版:

    下面這些下載的介紹僅適合CEF1&CEF3開發版。
     1.安裝depot_tools並且下載Chromium源代碼,你可以按照這個鏈接的內容來做http://dev.chromium.org/developers/how-tos/get-the-code,也可以按照下面的四個步驟來做,但是爲了避免一些潛在的問題,你最好設置chromium和depot_tools的下載目錄儘可能的短,並且不要包含空格和特殊字符。
     A.  裝一個1.6.x版本的SVN端,並且加到你的PATH裏面去
     B. 通過SVN來下載depot_tools
<span class="pln">  svn co http</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="com" style="color: rgb(136, 0, 0);">//src.chromium.org/svn/trunk/tools/depot_tools</span>
     C. 增加depot_tools的目錄到你的PATH,在Windows下depot_tools的路徑應該要放在TortoiseSVN的前面
    D. 創建一個Chromium簽出目錄(例如,/path/to/chromium),並且配置gclient如下:
<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium
gclient config http</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="com" style="color: rgb(136, 0, 0);">//src.chromium.org/chrome/trunk/src</span>
     remind:  上面這段你只要複製到cmd裏面去運行就可以了

    2. 在CEF的頂層目錄下查看CHROMIUM_BUILD_COMPATIBILITY.txt,並找到你需要的Chromium版本,這可能會發生改變,因爲CEF是隨着最新版本的Chromium改變而改變的
   3. 更新Chromium到合適的版本
<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium
gclient sync </span><span class="pun" style="color: rgb(102, 102, 0);">--</span><span class="pln">revision src@chromium_revision </span><span class="pun" style="color: rgb(102, 102, 0);">--</span><span class="pln">jobs </span><span class="lit" style="color: rgb(0, 102, 102);">8</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">--</span><span class="pln">force</span>
   4. 下載CEF源代碼到"cef"文件夾,而且這個文件夾必須包含在Chromium的"src"文件夾目錄下,你最好只下載CEF1或CEF3而不要兩者都下,假設你的Chromium源代碼下載在"/path/to/chromium/src",那麼你的CEF源代碼就應該放在"/path/to/chromium/src/cef"。注意不管你下的是CEF1或CEF3,文件夾名都必須命名爲"cef"
<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">src
svn co http</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="com" style="color: rgb(136, 0, 0);">//chromiumembedded.googlecode.com/svn/trunk/cef1 cef</span>

發佈版:

     發佈版和開發版基本的操作是一樣的,只不過是把有Debug的地方改成Release而已。具體的你可以查看原文鏈接。

手動編譯:

    1.運行cef_create_project腳本(windows下用.bat, OS-X和linux下用.sh)去產生一個在GYP配置下的編譯文件

<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">src</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">cef
</span><span class="pun" style="color: rgb(102, 102, 0);">./</span><span class="pln">cef_create_projects</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln">sh</span>

    2.編譯CEF

    windows下你可以直接用Visual Studio 的.sln文件編譯,做爲替代的方法,你也可以在命令行下運行腳本build_projects來編譯整個工程,
<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">src</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">cef</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">tools
build_projects</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln">sh </span><span class="typ" style="color: rgb(102, 0, 102);">Debug</span>

手動打包:

     當編譯好開發版和發佈版後,你可以用make_distrib工具(windows用.bat,OS-X和Linux用.sh)去創建一個二進制分發包。
<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">src</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">cef</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">tools
make_distrib</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln">sh</span>
     如果這個過程成功了,一個二進制的分發包會生成在/path/to/chromium/src/cef/binary_distrib目錄中。
     你可以去make_distrib.py腳本下看到更多的使用信息。

一般用法

使用CEF便捷的創建一個全功能的內建瀏覽器如下所示:

// Define an instance of our CefHandler implementation. Various methods in the MyHandler // instance will be called to customize browser behavior.  CefRefPtr<CefHandler> handler(new MyHandler()); // Provide information about the parent window, client rectangle, etc. CefWindowInfo info = {...}; // Create the new browser window object, which eventually results in a call to // MyHandler::HandleAfterCreated(). CefBrowser::CreateBrowser(info, false, handler, L"http://www.google.com");

在tests目錄下有一個客戶端程序的示例,叫cefclient。

文件結構

CEF資料庫結構如下:

  • include -- 包括用於CEF客戶端程序的include文件。
  • libcef -- libcef實現。
  • libcef_dll -- libcef C API 和 DLL 實現.
  • tests -- 測試程序.
    • cefclient -- CEF客戶端應用程序示例。
    • unittests -- CEF接口單元測試。

瀏覽器通知

瀏覽器通知是通過註冊的委託接口由瀏覽器發到客戶端程序的通知, CefHandler是最主要的委託接口, CefJSHandler則用於實現自定義的Javascript對象。

CefHandler支持以下接口:

  • 窗口創建之前 (HandleBeforeCreated),客戶端可用之取消與定製瀏覽器窗口創建過程。
  • 窗口創建之後(HandleAfterCreated). 可用於創建自定義的CefJSHandler對象。
  • 地址欄更新(HandleAddressChange). 將地址欄更改爲指定的字符串,通知發生於導航提交後與頁面加載前。
  • 標題更新(HandleTitleChange). 將標題更改爲指定的字符串,發生在頁面加載中。
  • 瀏覽前(HandleBeforeBrowse). 可用於取消導航,該事件的信息包括URL,Post數據,請求頭.
  • 開始加載(HandleLoadStart). 
  • 加載結束 (HandleLoadEnd). 
  • 加載錯誤(HandleLoadError). 加載過程中遇到錯誤,應用程序可提供自定義的錯誤頁面.
  • 資源加載前 (HandleBeforeResourceLoad). 應用程序可提供替代的數據源 (比如內存中的緩存)或者取消加載.
  • 顯示菜單前(HandleBeforeMenu). 可用於取消上下文菜單顯示或定製菜單,默認情況下,瀏覽器根據上下文顯示基本的菜單.
  • 獲取菜單標籤(HandleGetMenuLabel).在默認菜單顯示前,每個菜單項調用一次,可用於將英文默認內容改爲其它語言.
  • 菜單動作(HandleMenuAction). 用戶從默認上下文菜單選擇了一個選項,可用自己的方式來處理動作。
  • 打印選項(HandlePrintOptions). 打印設置對話框顯示前調用,可用於定製頁面大小、方向與邊距等.
  • 打印頁眉頁腳 (HandlePrintHeaderFooter). 在頁面視圖輸出到打印上下文,但是頁面結束前,可在預定義的6個位置(上左、上中、上右、下左,下中,下右)插入自定義的頁眉、頁腳字符串。該事件附帶的信息包括當前URL、標題、頁碼、總頁數、打印上下文、頁邊距與DPI拉伸比.
  • JavaScript警告 (HandleJSAlert). 應用程序可自定義Javascript Alert窗口.
  • JavaScrip確認 (HandleJSConfirm). 應用程序可自定義Javascript Comfirm窗口
  • JavaScrip提示 (HandleJSPrompt). 應用程序可自定義Javascript Prompt窗口
  • JavaScript Window 對象綁定 (HandleJSBinding). 應用程序將用戶定義的方法和變量附加到frame的window對象上
  • Window關閉前 (HandleBeforeWindowClose). 窗口關閉前
  • 獲得焦點(HandleTakeFocus). 瀏覽器組件失去焦點前調用
  • 設置焦點(HandleSetFocus). 瀏覽器組件請求焦點前調用
  • 鍵盤事件(HandleKeyEvent). 瀏覽器組件接收到鍵盤事件時
  • 提示 (HandleTooltip). 用於修改tooltip文字
  • 控制檯消息 (HandleConsoleMessage). 用於顯示控制檯消息.
  • 查詢結果(HandleFindResult).用於自定義查找結果顯示處理

CefV8Handler支持以下通知:

  • 執行事件(Execute). 應用程序執行指定的函數,該事件提供所有的Javascript參數,而且應用程序能指定返回值

瀏覽器事件

瀏覽器事件由客戶端應用程序通過CefBrowser和CefFrame的函數發送給瀏覽器:

  • 後退、前進、重新加載與停止加載,用於控制瀏覽器導航.
  • 撤消、重做、剪切、複製、粘貼、刪除、全選,用於控制目標區域內容.
  • 打印. 打印目標框架.
  • 查看源代碼. 將目標框架的HTML源代碼保存到臨時文件,並用默認的文本查看程序打開之
  • 加載URL. 在指定框架中加載指定URL
  • 載入字符串. 根據一個假URL在指定框架中加載某個字符串
  • 加載流. 根據一個假URL,在指定框架中加載二進制數據
  • 加載請求. 在指定框架中加載請求(URL, method, request data 與 headers) .
  • 執行腳本. 在目標框架中執行任意Javascript命令

內嵌 NPAPI 插件

CEF支持創建Netscape-style內嵌插件,使用相同 NPAPI的內嵌插件和標準的DLL插件行爲相同,但是,相對於使用獨立的DLL,內嵌插件由容器應用程序創建,並通過調用CefRegisterPlugin()註冊到系統,如果要直接使用這一功能,需要include cef_nplugin.h .

JavaScript擴展

CEF支持可以和原生應用程序代碼交互的Javascript擴展,參見cef.h的CefRegisterExtension() 函數和cefclient示例程序的"JavaScript Extension Handler" 以及 "UI App Example" 測試 .

自定義Schemes

CEF支持註冊與處理自定義scheme,類似於myscheme://mydomain。參見cef.h中的CefRegisterScheme()函數與示例應用程序cefclient中的 "Scheme Handler" 測試.

框架實現概覽

CEF所有的類以Cef爲前綴.

框架準備與拆卸

UI消息循環由框架創建的一個單獨線程處理,客戶端程序應負責通過分別調用CefInitialize()和CefShutdown() 來爲每個進程準備與關閉這一線程。

引用計數

所有實現了CefBase接口的框架類與對象指針都由CefRefPtr智能指針實現來處理,通過調用AddRef()和Release()自動處理引用計數。

平臺無關

CEF框架被設計成平臺無關,需要當前我們僅支持windows平臺,但是我們計劃將來支持其它平臺。爲了儘可能減少雙平臺支持帶來的麻煩,框架定義了一系列實現無關的接口與類型定義包裝跨平臺的行爲。

線程安全

框架的所有接口實現必須是跨線程訪問安全的,CefThreadSafeBase 模版提供原子的AddRef() 和 Release() 實現,還提供Lock() 和 Unlock()方法以同步方式訪問代碼塊.

框架接口

框架定義瞭如下接口:

  • CefBrowser 是主要的瀏覽器host類,通過它的靜態方法CefBrowser::CreateBrowser()方法創建新瀏覽器窗口.
  • CefFrame 表示瀏覽器窗口裏的一個框架(frame),每個瀏覽器窗口都有一個頂級的主框架,可通過CefBrowser::GetMainFrame()方法訪問之.
  • CefHandler 是傳給CefBrowser::CreateBrowser()方法的最主要委託接口.
  • CefRequest 表示請求數據,比如url, method, post data 和 headers.
  • CefPostData 和 CefPostDataElement 表示可能是請求一部分的post數據.
  • CefSchemeHandlerFactory 和 CefSchemeHandler 用於處理像myscheme://mydomain這樣的自定義scheme.
  • CefStreamReaderCefStreamWriterCefReadHandler 和 CefWriteHandler 讀寫數據的簡單的接口.
  • CefV8Handler 和 CefV8Value 用於創建和訪問Javascript對象.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章