系列文章目录
CEF学习day1-下载编译
CEF学习day2-cefsimple代码流程分析
应用程序结构
每个CEF3应用程序都具有相同的通用结构。
提供一个入口点函数,用于初始化CEF并运行子进程可执行逻辑或CEF消息循环。
提供CefApp的实现,以处理特定于流程的回调。
提供CefClient的实现,以处理特定于浏览器实例的回调。
调用CefBrowserHost::CreateBrowser()创建浏览器实例,并使用CefLifeSpanHandler管理浏览器寿命。
入口点功能
CEF3应用程序将运行多个进程。进程可以全部使用相同的可执行文件,也可以为子进程指定单独的可执行程序。流程的执行从入口点函数开始。适用于Windows、Linux和MacOS的完整平台特定示例分别在cefclient/cfclient_win.cc、cefclient/efclient_gtk.cc和cefclient/cefclient_mac.mm中提供。
启动子进程时,CEF将使用命令行指定配置信息,这些信息必须通过CefMainArgs结构传递到CefExecuteProcess函数中。CefMainArgs的定义是特定于平台的。在Linux和MacOS上,它接受传递到main()函数中的argc和argv值。
CefMainArgs main_args(argc,argv);
在Windows上,它接受传递给wWinMain()函数的实例句柄(HINSTANCE)。实例句柄也可以通过GetModuleHandle(nullptr)检索。
CefMainArgs main_args(hInstance);
单个可执行文件
当作为单个可执行文件运行时,需要入口点函数来区分不同的进程类型。单一可执行结构在Windows和Linux上受支持,但在MacOS上不受支持。
CefApp
实现此接口以提供处理程序实现。
CefApp接口提供对进程特定回调的访问。重要的回调包括:
OnBeforeCommandLineProcessing,它提供了以编程方式设置命令行参数的机会。
OnRegisterCustomSchemes,它提供了注册自定义方案的机会。
GetBrowserProcessHandler,它返回特定于浏览器进程的功能的处理程序,包括OnContextInitialized()方法。
GetRenderProcessHandler,它返回特定于渲染进程的功能的处理程序。这包括与JavaScript相关的回调和进程消息。
CefApp的一个示例实现可以在cefssimple/simple_app.h和cefssimple/simple_app.cc中看到。
CefClient
CefClient接口提供了对特定于浏览器实例的回调的访问。单个CefClient实例可以在任意数量的浏览器之间共享。重要的回调包括:
浏览器使用寿命、上下文菜单、对话框、显示通知、拖动事件、焦点事件、键盘事件等的处理程序。大多数处理程序都是可选的。
OnProcessMessageReceived,当从呈现进程接收到IPC消息时调用它。
CefClient实现的示例可以在cefsimple/simple_handler.h和cefsimple/simple_handler.cc中看到。
CefBrowserProcessHandler
类用于实现浏览器进程回调。除非另有说明,否则此类的方法将在浏览器进程主线程上调用。