Jcef应用浅析

来源:互联网 发布:java知识分享 编辑:程序博客网 时间:2024/06/04 00:25

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/

0 0
原创粉丝点击