Jcef應用淺析

CEF應用淺析

一、CEF簡介

a) CEF是一款基於Chromium瀏覽器的嵌入式框架,提供了基本的瀏覽器功能。包括自定義插件、各種協議、Javascript對象訪問和擴展。一些可選的功能包括,資源加載、導航、上下文目錄、打印等;值得一提的是,它對HTML5的支持和性能與Google Chrome瀏覽器同樣優秀。

b) CEF包括CEF1CEF2CEF3三個大版本。其中,CEF1僅支持單線程,CEF2已經被廢棄,所以現在基本是使用CEF3進行開發。

c) 如果希望瞭解更多相關內容,可以訪問它的網站

https://bitbucket.org/chromiumembedded/cef/wiki/Home

d) 由於CEF是基於Chromium內核的,所以CEF支持的操作系統也會有限制。參考下表

Branch Date

Release Branch

Chromium Version

CEF1

CEF3

Windows Build Requirements

Mac OS X Build Requirements

Linux Build Requirements

Dec 2011

963

17

Yes

No

WinXP+, VS2008, Win7 SDK

OS X 10.6-10.7, 10.5+ SDK, Xcode 3.2.6

Ubuntu 10.04+, Debian Squeeze+

Feb 2012

1025

18

Yes

No

WinXP+, VS2008, Win7 SDK

OS X 10.6-10.7, 10.5+ SDK, Xcode 3.2.6-4.x

Ubuntu 10.04+, Debian Squeeze+

Apr 2012

1084

19

Yes

No

WinXP+, VS2008, Win7 SDK

OS X 10.6-10.7, 10.5+ SDK, Xcode 3.2.6-4.x

Ubuntu 10.04+, Debian Squeeze+

Aug 2012

1180

21

Yes

Yes

WinXP+, VS2010, Win7 SDK

OS X 10.6-10.7, 10.5+ SDK, Xcode 3.2.6-4.x

Ubuntu 12.04+, Debian Squeeze+

Oct 2012

1271

23

Yes

Yes

WinXP+, VS2010, Win7 SDK

OS X 10.6-10.8, 10.6+ SDK, Xcode 3.2.6-4.x

Ubuntu 12.04+, Debian Squeeze+

Jan 2013

1364

25

Yes

Yes

WinXP+, VS2010, Win8 SDK, Ninja (optional)

OS X 10.6-10.8, Xcode 3.2.6-4.x, Ninja (optional)

Ubuntu 12.04+, Debian Squeeze+, Ninja (optional)

Apr 2013

1453

27

Yes

Yes

WinXP+, VS2010, Win8 SDK, Ninja (optional)

OS X 10.6-10.8, 10.6+ SDK, Xcode 3.2.6-4.x, Ninja (optional)

Ubuntu 12.04+, Debian Squeeze+, Ninja (optional)

Jul 2013

1547

29

No

Yes

WinXP+, VS2010-2012, Win8 SDK, Ninja (optional)

OS X 10.6-10.8, 10.6+ SDK, Xcode 3.2.6-4.x, Ninja (optional)

Ubuntu 12.04+, Debian Squeeze+, Ninja

Oct 2013

1650

31

No

Yes

WinXP+, VS2010-2012, Win8 SDK, Ninja (optional)

OS X 10.6-10.9, 10.6+ SDK, Xcode 3.2.6-5.x, Ninja

Ubuntu 12.04+, Debian Wheezy+, Ninja

Jan 2014

1750

33

No

Yes

WinXP+, VS2010-2013, Win8 SDK, Ninja

OS X 10.6-10.9, 10.6+ SDK, Xcode 3.2.6-5.x, Ninja

Ubuntu 12.04+, Debian Wheezy+, Ninja

Apr 2014

1916

35

No

Yes

WinXP+, VS2013, Win8 SDK, Ninja

OS X 10.6-10.9, 10.6+ SDK, Xcode 3.2.6-5.x, Ninja

Ubuntu 12.04+, Debian Wheezy+, Ninja

Aug 2014

2062

37

No

Yes

WinXP+, VS2013, Win8 SDK, Ninja

OS X 10.6-10.9, 10.6+ SDK, Xcode 3.2.6-5.x, Ninja

Ubuntu 12.04+, Debian Wheezy+, Ninja

Oct 2014

2171

39

No

Yes

WinXP+, VS2013u4, Win8.1 SDK, Ninja

OS X 10.6-10.9, 10.6+ SDK, Xcode 3.2.6-5.x, Ninja

Ubuntu 12.04+, Debian Wheezy+, Ninja

Jan 2015

2272

41

No

Yes

WinXP+, VS2013u4, Win8.1 SDK, Ninja

OS X 10.6-10.10, 10.6+ SDK, Xcode 3.2.6-5.x, Ninja, 64-bit only

Ubuntu 12.04+, Debian Wheezy+, Ninja

Apr 2015

2357

43

No

Yes

WinXP+, VS2013u4, Win8.1 SDK, Ninja

OS X 10.6-10.10, 10.6+ SDK, Xcode 3.2.6-5.x, Ninja, 64-bit only

Ubuntu 12.04+, Debian Wheezy+, Ninja

 

e) 如果需要下載CEF可以到如下鏈接中下載

CEF相關下載

http://www.magpcss.net/cef_downloads/index.php

CEF3相關下載

https://cefbuilds.com/#branch_trunk

f) 嘗試使用的話,可以在下載包中,找到cefsimple.execefclient.exe,通過使用可以瞭解更多的相關特性。

二、JCEF簡介

a) JCEF項目對CEF進行了一層Java封裝。使用JNI調用CEF的功能。

三、CEF編譯

a) 由於目前需要Windows下的cef,我這裏只說一下Windows下的編譯方式。

b) 首先,你的機器必須安裝了Visual Studio 2013 Update4

c) 然後,需要安裝depot_tools

d) 還需要安裝Windows 8.1 SDK

e) 安裝GYP也是必須的

f) 由於我這裏只是使用了Visual Studio進行編譯,其他幫助可以參考

http://dev.chromium.org/developers/how-tos

g) 設置環境變量,set GYP_GENERATORS=msvs

h) 進入加壓後的文件

i) 主要是使用GYP生成Visual Studio需要的項目配置文件.sln

gclient runhooks

j) 然後使用Visual Studio打開,生成cefclientcefsimple就可以了

k) 具體的過程參考

https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding.md

l) CEF的使用方法參考

https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage.md

四、JCEF編譯

a) 編譯JCEF可以在Windows, LinuxMac OS X for 64-bit Oracle 7 Java目標上,32位沒有測試,這裏我測試了Windows 7,可以編譯通過,使用的是"1.7.0_25"

b) GYPVisual Studio 2013depot_tools是必須的,GYPdepot_tools的路徑配置到PATH

c) 配置gclient

gclient config --unmanaged --name=src 

https://bitbucket.org/chromiumembedded/java-cef.git 

d) 下載JCEF和第三方依賴

gclient sync --jobs 8 --force --nohooks

e) 在src/third_party/cef/README.jcef中,看當前的JCEF支持什麼CEF版本,不要看錯,http://magpcss.org/ceforum/裏的帖子好多都是因爲這個造成的

f) 然後去http://cefbuilds.com裏下載,這裏我使用的win32,下載的是win32的一個版本,放到src/third_party/cef/win32

g) 在src下使用gclient runhooks生成.sln文件,用Visual Studio編譯生成目標文件,目標可以是DebugRelease的,生成的目錄也不相同

h) 接着在當前shell中定義變量

set GYP_GENERATORS=msvs

set GYP_DEFINES=jcef_platform=win32 jdk_directory="C:\JDK7_25"

i) 在src/tools中,compile.bat win32編譯,會在src/out/win32下生成

j) 使用src/tools/run.bat win32 Debug detailed運行

k) 如果路徑不對,看下腳本吧

l) 最後,使用src/tools/make_distrib.bat win32打包,在src/binary_distrib/win32下可以找到

五、JCEF使用

a) 基於JCEF開發,需要使用到CEF生成的libcef.dlljcef.dll等文件,還需要jcef.jar

b) 可以參考tests.detailed.MainFrametests.simple.MainFrame

c) 由於我這裏的主要需求是使用瀏覽器加載html字符串,字符串中包括jscss和圖片等內容,直接使用loadUrlloadString都不能達到要求

d) loadUrl只能加載url頁面,loadString不能解析html字符串中的文件元素

e) 這裏參考了tests.detailed.MainFrameClientSchemeHandler

f) 具體步驟如下

i. CefApp.addAppHandler()添加一個CefAppHandlerAdapter的子類

ii. 在CefAppHandlerAdapter的子類的onRegisterCustomSchemes方法中,使用registrar.addCustomScheme添加一個自定義的scheme

iii. 在CefAppHandlerAdapter的子類的onContextInitialized方法中,使用cefApp.registerSchemeHandlerFactory,把自定義的shemedomain名稱與自定義的CefSchemeHandlerFactory映射

iv. 每次CefSchemeHandlerFactory.create時,返回一個自定義的CefResourceHandlerAdapter

v. 可以通過改變processRequest中的html信息來加載html字符串

vi. Html中包含的文件元素,可以手動加載如html中,因爲html解析是先解析html字符串,然後對於其中的文件信息在進行請求

g) 但JCEF對於SWT的支持不太好,可以參考Javacef,這個是一個國人寫的,不過,我測試了一下,在我機器上,有些不太穩定,沒有深究,可以學習和借鑑,

https://code.google.com/p/javacef/

發佈了158 篇原創文章 · 獲贊 75 · 訪問量 50萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章