cef内核最近使用的体会低版本vs编译下载嵌入的体会

前言

最近一段时间忙着把浏览器内核框架中的cef框架更新到新版本,以及最近对于cef内核的理解。

1、cef简介和下载编译

CEF全称是Chromium Embedded Framework,它是Chromium的Content API的封装库。

CEF官网地址:https://bitbucket.org/chromiumembedded/cef
CEF官方论坛:http://www.magpcss.org/ceforum
CEFSharp:https://github.com/cefsharp/CefSharp
ChromiumFX,.NET bindings for the Chromium Embedded Framework.: https://bitbucket.org/chromiumfx/chromiumfx

其中我是在这个地址下载的:https://cef-builds.spotifycdn.com/index.html#windows32
在这里插入图片描述
下载的版本:05/26/2016 - 3.2704.1414.g185cd6c / Chromium 51.0.2704.47STABLE,下载地址:https://cef-builds.spotifycdn.com/cef_binary_3.2704.1414.g185cd6c_windows32.tar.bz2
Google Code上倒是可以下载,但是是老的版本,2012年的: Google Code chromiu
membedded

在这里插入图片描述

但是好处是有vs2005、vs2008、vs2010版本的sln,不需要使用CMake转换。

下载好完整目录结构如下:
在这里插入图片描述
其中包括了CMakeLists.txt,其中使用低版本vs例如vs2008还要额外增加一个stdint.h就可以。
在这里插入图片描述
其中使用cmake配置编译完成如下结构:
在这里插入图片描述
例如这个cefclient工程运行出来cefclient.exe。
在这里插入图片描述

2、嵌入到工程框架中遇到的问题

当关闭相关浏览器时候碰到调用这个接口崩溃现象:

bool CefV8ValueCToCpp::GetKeys(std::vector<CefString>& keys) {
  cef_v8value_t* _struct = GetStruct();
  if (CEF_MEMBER_MISSING(_struct, get_keys))
    return false;

  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING

  // Translate param: keys; type: string_vec_byref
  cef_string_list_t keysList = cef_string_list_alloc();
  DCHECK(keysList);
  if (keysList)
    transfer_string_list_contents(keys, keysList);

  // Execute
  int _retval = _struct->get_keys(_struct,
      keysList);

  // Restore param:keys; type: string_vec_byref
  if (keysList) {
    keys.clear();
    transfer_string_list_contents(keysList, keys);
    cef_string_list_free(keysList);
  }

  // Return type: bool
  return _retval?true:false;
}

首先打开微博三方接入url如下:
在这里插入图片描述
跳转到密码登录界面:
在这里插入图片描述
这个时候点击右上角关闭导致析构时间调用GetKey接口出现问题,先注释就可以。这个问题得后续继续排查。

3、VisualStudio2017、2019编译

VisualStudio2017、2019编译非常快速,使用CMake对cef_binary_3.3578.1860.g36610bd_windows32创建build项目,创建成功后只编译libcef_dll_wrapper即可,其他lib和资源使用编译好的即可。

2021年3月3日,以下载 cef_binary_88.2.9+g5c8711a+chromium-88.0.4324.182_windows32_minimal 为例,使用CMake-gui转换,默认是64位版本(如果需要使用32位版本,转换的时候注意选择Win32),转换后的vs工程默认就是Unicode字符集MTd(MT)的,直接编译libcef_dll_wrapper即可,生成的lib拷走,其他的lib直接使用现成的。

4、如何使用编译好的库以及相关动态文件

经测试主程序目录下须携带以下文件:

libcef.dll
chrome_elf.dll
icudtl.dat
v8_context_snapshot.bin
cef.pak
cef_extensions.pak
cef_200_percent.pak
cef_100_percent.pak

如果主程序运行仍然出错,可能就是资源文件没有配齐,可以再复制一些cef的资源文件进去试试。
在这里插入图片描述

5、注意

尽量链接release版本的,要链接:libcef.lib、cef_sandbox.lib、libcef_dll_wrapper
字符串要传递的时候,需转换为Unicode,可使用std::wstring转换,注意使用CStringW转换可能会有问题。
VisitDOM只能在render进程中使用,无法在browser进程中使用。

6、常见问题

cefinitialize崩溃:说明exe执行路径下缺少相关文件导致初始化失败,可以把Resources目录下的locales文件夹、icudtl.dat、cef*.pak等文件复制过来。
base::Bind not found:解决办法:修改为base::BindOnce,会提示找不到OnceCallback,需要在cef_bind.h头文件中添加对cef_callback.h文件的包含,这个太坑了。

7、cef的通信及同步调用JS

。。。。。

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森明帮大于黑虎帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值