创建浏览器实例

CefBrowserHost::CreateBrowser

访问URL

通过GetMainFrame函数,然后调用LoadURL

执行JS代码

通过GetMainFrame函数,然后调用ExecuteJavaScript

frame

一个网页有多个frame,有一个mainframe和多个subframe,发送消息时,将frame的id放入参数中一起发过去,接收时消息时,获取frameid,就可以实现指定frame通讯。因为frameid是一个int64类型的数据,所以发送时将它分解为两个int32

的高低位数据,接收数据时,再将两个int32的数据拼接成一个int64数据

进程

cef存在两种进程,render进程和browser进程

render进程

负责显示web页面,执行javascript代码

v8引擎的初始化是在render进程中调用的,所以javascript代码是在render进程中执行的

当你调用frame->ExecuteJavaScript()

也仅仅是将代码发送到render进程执行

browser进程

创建windows系统的客户端窗口的进程

一般我们的webrtc sdk和我们的C++代码应该执行在browser进程

进程通信

这样就引入了本文要讲的问题,运行在browser进程的c++代码如何给render进程中javascript传递数据。 两个进程的通信是通过发送进程间消息来完成的


查看当前浏览器的运行状态

在地址栏直接输入,查看当前的网页通信状态

chrome://webrtc-internals/


Cef3

参考

CEF和JS交互 - shenyantaoit - 博客园 (cnblogs.com)

Cef3 学习资料 - 朝十晚八 - 博客园 (cnblogs.com)

cefutil/doc/CEF_Close.md at master · fanfeilong/cefutil · GitHub

CEF 嵌入到MFC的流程,包括启动CEF以及CEF程序的关闭流程。_cef mfc_不甘平凡的小鸟的博客-CSDN博客

git-repo | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

Chromium OS 镜像使用帮助 - 清华大学开源软件镜像站使用帮助 - 开发文档 - 文江博客 (wenjiangs.com)