1. 程式人生 > >Chromium Embedded Framework基本用法及理解

Chromium Embedded Framework基本用法及理解

CEF簡介: 

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

    它的設計思想政治就是易用且兼顧效能。CEF基本的框架包含C/C++程式介面,通過本地庫的介面來實現,而這個庫則會隔離宿主程式和Chromium&Webkit的操作細節。它在瀏覽器控制元件和宿主程式之間提供緊密的整合,它支援使用者外掛,協議,javascript物件以及javascript擴充套件,宿主程式可以隨意地控制元件資源下載,導航,下下文內容和列印等,並且可以跟Google Chrome瀏覽器一起,支援高效能和Html5 技術。

CEF用法:

指南:

  首先把這段程式碼插入到視窗的建立函式裡面去:

// Create an instance of our CefClient implementation. Various methods in the
// MyClient instance will be called to notify about and customize browser
CefRefPtr<CefClient> client(new MyClient());

// Information about the parent window, client rectangle, etc.
CefWindowInfo info;
info.SetAsChild(...);

// Browser initialization settings.
CefBrowserSettings settings;
 
// Create the new browser window object asynchronously. This eventually results
// in a call to CefLifeSpanHandler::OnAfterCreated().
CefBrowser::CreateBrowser(info, client, "http://www.car1000.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的簡介和基本的用法及說明,後面我將把在自己專案中具體實現的Demo過程釋出上來,請注意檢視.