天天看點

Chromium Embedded Framework中文文檔之(基本使用)

使用CEF便捷的建立一個全功能的内建浏覽器如下所示:

在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指令

CEF支援建立Netscape-style内嵌插件,使用相同 NPAPI的内嵌插件和标準的DLL插件行為相同,但是,相對于使用獨立的DLL,内嵌插件由容器應用程式建立,并通過調用CefRegisterPlugin()注冊到系統,如果要直接使用這一功能,需要include cef_nplugin.h .

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

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.

CefStreamReader, CefStreamWriter, CefReadHandler 和 CefWriteHandler 讀寫資料的簡單的接口.

CefV8Handler 和 CefV8Value 用于建立和通路Javascript對象.

繼續閱讀