知识库 : 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)