Delphi中Chrome Chromium、Cef3學習筆記(一)
阿新 • • 發佈:2018-11-11
原文 http://blog.csdn.net/xtfnpgy/article/details/46635225
CEF支援插入網景風格的外掛,插入外掛的動作跟正常插入基本動態連結庫的外掛一樣,但是做為一個單獨的Dll,必須通過容器來建立,並且要用CefRegisterPlugin()這個函式來註冊到系統裡面去。你要呼叫這個函式的話,你就得包含cef_nplugin.h這個標頭檔案。
chrm1.Browser.MainFrame.LoadUrl('about:blank'); //第一次必須先載入空白頁,才能瀏覽其他網頁
chrm1.Browser.MainFrame.LoadUrl('你要瀏覽的網址'); 至此第一個例子完成!
官方下載地址:https://cefbuilds.com/
CEF簡介:
嵌入式Chromium框架(簡稱CEF) 是一個由Marshall Greenblatt在2008建立的開源專案,它主要目的是開發一個基於Google Chromium的Webbrowser控制元件。CEF支援一系列的程式語言和作業系統,並且能很容易地整合到新的或已有的工程中去。
它的設計思想政治就是易用且兼顧效能。CEF基本的框架包含C/C++程式介面,通過本地庫的介面來實現,而這個庫則會隔離宿主程式和Chromium&Webkit的操作細節。它在瀏覽器控制元件和宿主程式之間提供緊密的整合,它支援使用者外掛,協議,javascript物件以及javascript擴充套件,宿主程式可以隨意地控制元件資源下載,導航,下下文內容和列印等,並且可以跟Google Chrome瀏覽器一起,支援高效能和Html5 技術,
這段程式碼你可以在[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物件。 Cef3下載下來的檔案結構: bin目錄是主要存放DLL,你需要把bin目錄下所有的檔案,複製到你的Exe的當前資料夾,否則就會報錯!code 126 demo 為例子 packages為壓縮包 src主要原始碼部分,需要在delphi的library新增這個src的路徑 安裝完成之後,新建一個Demo1,拖一個chromium控制元件出來並命名為chrm1,並把bin目錄下所有檔案,複製到你的程式的當前資料夾; 再拖一個button,雙擊加入程式碼:chrm1.Browser.MainFrame.LoadUrl('about:blank'); //第一次必須先載入空白頁,才能瀏覽其他網頁
chrm1.Browser.MainFrame.LoadUrl('你要瀏覽的網址'); 至此第一個例子完成!