OC-CEF

什么是CEF

Chromium Embedded Framework(Chromium嵌入式框架)
CEF是多进程,
browser作为主进程:负责窗口管理,界面绘制和网络交互
Render进程:负责Blink的渲染和Js的执行
默认会为每个标签页创建一个新的Render进程。其他进程按需创建比如GPU进程

一个CefClient实现可以在任意数量的Browser进程中共享
CefClient:是主浏览器窗口的代表接口,处理浏览器页面的各种回调信息,包括Browser的生命周期,右键菜单,对话框,状态通知显示,下载事件,拖拽事件,焦点事件,键盘事件,离屏渲染事件。这个接口做为参数传递给CreateBrowser()

CefV8Handler,CefV8Value和CefV8Context是被用来创建和访问JavaScript对象
默认情况主程序进程会被创建多次

CefV8Handler

V8 handler 创建的有效线程包含render进程的(main thread (TID_RENDERER) and WebWorker threads)

browser

当Browser对象创建后OnAfterCreated() 方法立即执行

OnProcessMessageReceived

OnProcessMessageReceived在Browser收到Render进程的消息时被调用 也会在Render收到Browser消息的时候调用 是各自类里面的方法

常用线程

TID_UI
浏览器进程的主线程,如果使用CefSettings.multi_threaded_message_loop=false来调用CefInitialize(),则此线程同就应用程序主线程是同一个。

TID_IO
浏览器进程用来处理IPC及网络消息的线程。

TID_FILE*
浏览器进程用来与文件系统打交道的线程。阻塞操作应该在此线程或由客户程序创建的CefThread中运行。

TID_RENDERER
渲染进程中的主线程。所有的Blink及V8交互必须在此线程中执行

CefExecuteProcess

CefExecuteProcess()方法来检测是否要启动其它的子进程,会分析type参数 如果为空就说明是browser进程,然后回溯去创建browser进程相关内容,如果type参数不为空就调用content::ContentMain方法,在OnContextInitialized方法里面会创建SimpleHandler 传递给CefBrowserHost::CreateBrowser

Browser进程是需要CefApp(SimpleApp实现了这个接口) 和CefClient(SimpleHandler实现了这个接口)但是Render进程只是CefApp

和JS的三种交互方式

  • 在native代码中通过CefFrame::ExecuteJavaScript()来执行JavaScript代码
  • 将函数或对象绑定到CefFrame对应的window对象上,JS代码通过window对象访问native代码导出的函数或对象
  • 使用CefRegisterExtension()注册JS扩展,JS直接访问注册到JS Context中的对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值