记录一次项目中CEF版本的升级(一):CEF调研
CEF概述:
Chromium Embedded Framework (CEF)是个基于Google Chromium项目的开源Web browser控件,支持Windows, Linux, Mac平台。除了提供C/C++接口外,也有其他语言的移植版。
因为基于Chromium,所以CEF支持Webkit & Chrome中实现的HTML5的特性,并且在性能上面,也比较接近Chrome。
CEF还提供的如下特性:自定义插件、自定义协议、自定义JavaScript对象和扩展;可控制的resource loading, navigation, context menus等等。
本次升级说明:
之前项目为了兼容xp系统,使用的CEF版本是老旧的2623版本,不支持很多新的html5的特性,对现在的功能造成影响,因此在讨论后决定,放弃对xp系统的支持,升级CEF版本,保证功能的效果。
CEF调研:
二进制下载:
路径:CEF Automated Builds (spotifycdn.com)
本次升级选择当前最新稳定版本
该分支目前是支持维护的。
对应的源码路径为:chromiumembedded / cef — Bitbucket
5304分支,26c0b5e提交记录
下载完成后目录格式如下:
目录的组成及作用:
通过README.txt可知各个目录作用:
cmake:包含cmake配置文件
debug:debug版本的libcef.dll, libcef.lib和其他需要的组件
include:所有cef头文件
libcef_dll:包含libcef_dll_wrapper静态库源码
Release:release版本的libcef.dll, libcef.lib和其他需要的组件
Resources:包含libcef.dll需要的资源
tests/cefclient:包含cefclient样例应用程序,这个应用程序演示了cef的各种功能
tests/cefsimple:包含cefclient样例应用程序,这个应用程序演示了创建浏览器窗口所需的最小功能
tests/ceftests: cef api的单元测试
tests/gtest:包含ceftests使用的谷歌c++测试框架
通过README.txt可知:
cef必须组件:
- libcef.dll : 核心库
- chrome_eld.dll :崩溃上报库
- icudtl.dat :Unicode支持数据
- v8_context_snapshot.bin、snapshot_blob.bin:V8快照数据
cef可选组件:
-
locales/ : 本地化资源
目录包括cef、chromium、blink使用的本地化资源。根据CefSettings.locale的值加载这个目录里的.pak文件。仅配置的本地化文件需要被发布。没有配置则使用默认的本地化“en-US”。没有这些文件,web组件可能会显示错误。 -
chrome_100_percent.pak、chrome_200_percent.pak、resources.pak
包括cef、chromium、blink使用的非本地化资源,没有时web组件可能会显示错误。 -
d3dcompiler_47.dll :支持Direct3D
支持GPU对HTML5的加速渲染 -
libEGL.dll、libGLESv2.dll
支持渲染HTML5 -
vk_swiftshader.dll、vk_swiftshader_icd.json、vulkan-1.dll
支持软件渲染HTML5,作为GPU加速关闭或者失败的备选
样例和测试程序编译:
根据CMakeList.txt可知:
CMake版本为3.19及以上
VS2019及以上
Windows7及以上
若编译32位程序,在CMake参数中加入 -A Win32
CMake生成工程如下:
打开VS工程后即可编译。
cef使用和说明文档:
- Tutorial https://bitbucket.org/chromiumembedded/cef/wiki/Tutorial
- General Usage https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage
中文文档:
cef和chromium的参数设置:
初始化设置
CefSettings //cef_settings_t
{
//这里只列出部分重要的参数,完整参数请查看源码
int no_sandbox; //设置1,不启动沙箱。沙箱可以保护用户不受不信任且可能存在恶意的Web内容。
cef_string_t browser_subprocess_path; //子进程可执行文件的路径(若为空则主进程会被启动),也可以使用命令行"browser-subprocess-path"代替
int multi_threaded_message_loop; //设置1,则启动browser进程消息循环在另一个线程,若为0,则必须调用CefDoMessageLoopWork去更新循环
int windowless_rendering_enabled; //设置1,则启动离屏渲染
int command_line_args_disabled; //设置1,则禁止进程启动时的命令行参数
cef_string_t cache_path; //全局浏览器缓存数据存储路径。若为空,则将以“隐名模式”创建,使用内存缓存,不会持久化到磁盘中。若不为空,则必须是root_cache_path或者其子目录
cef_string_t root_cache_path; //缓存根目录
cef_string_t user_data_path; //用户数据路径。Widevine CDM模块和拼写等用户数据所在的位置。若为空,则默认路径被使用:AppData\Local\CEF\User Data。
int persist_session_cookies; //设置1,则持久化会话cookies(未过期的)。|cache_path|在此时必须要指定,也可以用使用命令行"persist-session-cookies"
int persist_user_preferences; //设置1,则持久化用户参数为json文件。|cache_path|在此时必须要指定,也可以用使用命令行"persist-user-preferences"
cef_string_t locale; //本地化字符。若为空,则使用默认“en-US”,也可以使用命令行"lang"
cef_string_t log_file; //日志文件名。若为空,则默认为产生debug.log在主可执行文件目录,可使用命令行"log-file"
cef_log_severity_t log_severity; //日志等级。"verbose", "info","warning", "error", "fatal" or "disable"。 可使用命令行"log-severity"
cef_string_t resources_dir_path; //资源目录,若为空,则必须保持当前模块路径。可使用命令行"resources-dir-path"
cef_string_t locales_dir_path; //本地化目录,若为空,则必须保持当前模块路径。可使用命令行"locales-dir-path"
cef_color_t background_color; //背景颜色。在网页加载前或者未指定网页颜色时使用。
cef_string_t accept_language_list; //可接受的语言列表。逗号分隔不带空格,使用在"Accept-Language" HTTP header中。
}
浏览器设置:
CefBrowserSettins //_cef_browser_settings_t
{
//这里只列出部分重要的参数,完整参数请查看源码
int windowless_frame_rate; //离屏渲染最大帧率,实际帧率可能比设置的小,范围(1-60),默认30.可动作修改CefBrowserHost::SetWindowlessFrameRate
cef_string_t default_encoding; //默认编码。为空则使用"ISO-8859-1"。可使用命令行"default-encoding"
cef_state_t image_loading; //控制是否从网络加载图像URL
cef_state_t image_shrink_standalone_to_fit; //控制是否缩小独立的图像以适应页面,可使用命令行"image-shrink-standalone-to-fit"
cef_state_t text_area_resize; //控制文字区域是否可以重定义大小,命令行"disable-text-area-resize"
cef_state_t tab_to_links; //控制是否tab键可以移动链接焦点。命令行"disable-tab-to-links"
cef_state_t local_storage; //控制是否开启本地存储。命令行"disable-local-storage"
cef_state_t databases; //控制数据库是否开启。命令行"disable-databases"
cef_state_t webgl; //控制webgl是否开启。命令行"disable-webgl"
cef_color_t background_color; //背景颜色。同上面初始化设置中
ef_string_t accept_language_list; //同上面初始化设置中
}
命令行设置:
可通过启动时的命令行参数设置参数,支持cef和chromium命令行
命令行参数要求:
用"--" 或者 "-" 或者 "/" 作为分隔符
有值的参数使用"="连接
参数的名字必须是小写的ASCII
参数的值会保留大小写和UTF8编码
格式举例:-switch1=value1-switch2=value2
通过查找*_switches.cc可得内置得参数有哪些
这里不列举
Chromium命令行:
List of Chromium Command Line Switches « Peter Beverloo
cef和chromium版本号及html5功能支持查看:
输入网址:chrome://version
html5功能支持测试:http://html5test.com/
本文来自博客园,作者:river12,转载请注明原文链接:https://www.cnblogs.com/river12/p/17022116.html