知识库 : cef应用浅析

Edit Document

 

 

 

 

CEF应用浅析

 


目录

一、 CEF 简介

二、 JCEF 简介

三、 CEF 编译

四、 JCEF 编译

五、 JCEF 使用

 

1 CEF 简介

a)          CEF 是一款基于 Chromium 浏览器的嵌入式框架,提供了基本的浏览器功能。包括自定义插件、各种协议、 Javascript 对象访问和扩展。一些可选的功能包括,资源加载、导航、上下文目录、打印等;值得一提的是,它对 HTML5 的支持和性能与 Google Chrome 浏览器同样优秀。

b)         CEF 包括 CEF1 CEF2 CEF3 三个大版本。其中, CEF1 仅支持单线程, CEF2 已经被废弃,所以现在基本是使用 CEF3 进行开发。

c)          如果希望了解更多相关内容,可以访问它的网站

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

d)         由于 CEF 是基于 Chromium 内核的,所以 CEF 支持的操作系统也会有限制。参考下表 1

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

1 cef 支持系统对比

e)          如果需要下载 CEF 可以到如下链接中下载

CEF 相关下载

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

CEF3 相关下载

https://cefbuilds.com/#branch_trunk

f)           尝试使用的话,可以在下载包中,找到 cefsimple.exe cefclient.exe ,通过使用可以了解更多的相关特性。

2 JCEF 简介

a)          JCEF 项目对 CEF 进行了一层 Java 封装。使用 JNI 调用 CEF 的功能。

3 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 打开,生成 cefclient cefsimple 就可以了

k)          具体的过程参考

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

l)           CEF 的使用方法参考

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

4 JCEF 编译

a)          编译 JCEF 可以在 Windows, Linux Mac OS X for 64-bit Oracle 7 Java 目标上, 32 位没有测试,这里我测试了 Windows 7 ,可以编译通过,使用的是 "1.7.0_25"

b)         GYP Visual Studio 2013 depot_tools 是必须的, GYP depot_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 编译生成目标文件,目标可以是 Debug Release 的,生成的目录也不相同

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 下可以找到

5 JCEF 使用

a)          基于 JCEF 开发,需要使用到 CEF 生成的 libcef.dll jcef.dll 等文件,还需要 jcef.jar

b)         可以参考 tests.detailed.MainFrame tests.simple.MainFrame

c)          由于我这里的主要需求是使用浏览器加载 html 字符串,字符串中包括 js css 和图片等内容,直接使用 loadUrl loadString 都不能达到要求

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

e)          这里参考了 tests.detailed.MainFrame ClientSchemeHandler

f)           具体步骤如下

      1. CefApp.addAppHandler() 添加一个 CefAppHandlerAdapter 的子类
      2. CefAppHandlerAdapter 的子类的 onRegisterCustomSchemes 方法中,使用 registrar.addCustomScheme 添加一个自定义的 scheme
      3. CefAppHandlerAdapter 的子类的 onContextInitialized 方法中,使用 cefApp.registerSchemeHandlerFactory ,把自定义的 sheme domain 名称与自定义的 CefSchemeHandlerFactory 映射
      4. 每次 CefSchemeHandlerFactory.create 时,返回一个自定义的 CefResourceHandlerAdapter
      5. 可以通过改变 processRequest 中的 html 信息来加载 html 字符串
      6. Html 中包含的文件元素,可以手动加载如 html 中,因为 html 解析是先解析 html 字符串,然后对于其中的文件信息在进行请求

g)          JCEF 对于 SWT 的支持不太好,可以参考 Javacef ,这个是一个国人写的,不过,我测试了一下,在我机器上,有些不太稳定,没有深究,可以学习和借鉴,

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

Attachments:

cef应用浅析.doc (application/msword)