记录一次项目中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必须组件:

  1. libcef.dll : 核心库
  2. chrome_eld.dll :崩溃上报库
  3. icudtl.dat :Unicode支持数据
  4. v8_context_snapshot.bin、snapshot_blob.bin:V8快照数据

cef可选组件:

  1. locales/ : 本地化资源
    目录包括cef、chromium、blink使用的本地化资源。根据CefSettings.locale的值加载这个目录里的.pak文件。仅配置的本地化文件需要被发布。没有配置则使用默认的本地化“en-US”。没有这些文件,web组件可能会显示错误。

  2. chrome_100_percent.pak、chrome_200_percent.pak、resources.pak
    包括cef、chromium、blink使用的非本地化资源,没有时web组件可能会显示错误。

  3. d3dcompiler_47.dll :支持Direct3D
    支持GPU对HTML5的加速渲染

  4. libEGL.dll、libGLESv2.dll
    支持渲染HTML5

  5. 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使用和说明文档:

中文文档:

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/

posted @ 2023-01-03 14:44  river12  阅读(1794)  评论(0编辑  收藏  举报