当前位置: 首页 > news >正文

CEF关闭流程

整理了一下之前写的cef推荐的关闭流程的文档

参考文档和实际demo来看,关闭流程离屏渲染和非离屏渲染时不同的,主要区别在于非离屏渲染有一个cef自建的窗口,非离屏渲染的退出和这个窗口密切相关。

CefBrowserHost::TryCloseBrowser

适用于窗口模式工作的CEF browser,如果是离屏渲染应该使用CloseBrowser(false)来尝试关闭浏览器。

CefLifeSpanHandler::DoClose

CefLifeSpanHandler::DoClose这个函数会在browser已经准备关闭时调用,意味着browser生命周期的关闭,关闭已经准备就绪,并且JS已经被卸载或者可以忽略。
这个函数的触发基本上是来自于CefBrowser::[Try]CloseBrowser()的直接调用。如果承载browser的窗口已经被销毁(父窗口),DoClose不会被调用,并且此时不再有机会去执行客制化关闭。

开发时应该避免承载browser窗口立刻关闭,而是通过CefBrowser::CloseBrowser()函数或者CefBrowserHost::CloseBrowser(false)来处理关闭通知。文档中提到,关闭承载浏览器的窗口应该通过CefBrowser::CloseBrowser()函数或者CefBrowserHost::CloseBrowser(false)来触发(实现一个从下到上的关闭,和平常的从父窗口开始关闭相反),或者也可以从上到下(如果可以处理关闭信号并Block关闭流程),但是要block一下父窗口的关闭流程。可以算是两种方案?

当时用有窗口模式的CEF时,CEF会创建一个窗口来承载浏览器,此时DoClose返回false后会发送一个标准关闭通知到这个窗口的上层窗口(即用来承载browser时创建的窗口)。

当使用离屏渲染模式的时候,CEF就不会创建窗口了,此时DoClose返回false后browser对象会立刻开始销毁(没有关闭信号通知了,开发者应该自行处理窗口的关闭销毁逻辑)。

如果承载browser的窗口需要一个非标准的关闭通知(非标准的自定义关闭流程?),此时DoClose应该返回true,他不会继续处理浏览器的关闭流程,开发者需要后续自己主动关闭。

一般来说,返回值为false,由browser主导关闭主动权。

CefBrowserHost::CloseBrowser(bool force_close)

并不推荐使用的关闭函数,较为粗暴的关闭,force_close参数为false时可能会被用户取消关闭,为true时会尽快关闭。但是最好还是关注一下各个生命周期会触发的回调函数。

CefLifeSpanHandler::OnBeforeClose()

CefLifeSpanHandler::OnBeforeClose()这个函数会在browser对象销毁钱立刻被调用,当所有的browser对象都触发了这个函数之后,应用才可以安全退出。

该函数没有返回值,只是一个用于通知的回调函数。

关闭流程(非离屏渲染)使用TryCloseBrowser()退出

  1. 用户点击APP业务窗口的关闭按钮,此时开始处理APP业务窗口的关闭触发函数
  2. 关闭流程开始调用TryCloseBrowser()TryCloseBrowser()返回false,代表cef client取消了窗口关闭,此时还不能直接关闭,但是已经将关闭请求发给Browser
  3. JavaScriptonbeforeunload回调被触发执行,并且展示关闭确认通知
  4. 用户同意关闭
  5. JavaScript的onunload被调用
  6. 应用层DoClose()被调用并且默认返回false
  7. CEF发送一个关闭通知到APP业务窗口(因为DoClose()返回了false)
  8. APP业务窗口收到了关闭通知,并且再次调用TryCloseBrowser()来检查,此时该函数返回true,客户端允许窗口关闭
  9. APP业务窗口被销毁,触发child browser窗口的销毁(这里是自上而下的窗口销毁)
  10. 应用的OnBeforeClose回调触发,browser对象被销毁,此时就可以安全的关闭APP业务窗口了
  11. 如果没有其他browser存在的话,就可以调用CefQuitMessageLoop()来退出了。

关闭流程(CloseBrowser(false)退出)

依然需要实现DoClose()回调,用于非正常关闭处理,或者一些不是由browser进程创建的窗口

  1. 用户点击窗口的关闭按钮,此时关闭通知发送到了browser业务窗口(以下简称上层窗口)
  2. 上层窗口收到了关闭通知,执行了如下操作
    a. 调用CefBrowserHost::CloseBrowser(false)
    b. 取消窗口关闭
  3. JavaScriptonbeforeunload回调被触发执行,并且展示关闭确认通知
  4. 用户同意关闭
  5. JavaScript的onunload被调用
  6. 应用层DoClose()被调用,此时将
    a. 设置一个flag标记位指明下一个上层窗口的关闭尝试将会被允许
    b. return false
  7. CEF发送一个关闭通知到上层窗口(因为DoClose()返回了false)
  8. 上层窗口收到关闭通知并且允许窗口关闭(参考6.a.)
  9. 上层窗口被销毁,触发child browser窗口的销毁(这里是自上而下的窗口销毁)
  10. 应用的OnBeforeClose回调触发,browser对象被销毁
  11. 如果没有其他browser存在的话,就可以调用CefQuitMessageLoop()来退出了。

离屏渲染须知

使用离屏渲染模式进行CEF的开发时,调用TryCloseBrowser()不会触发DoClose()
应该使用CloseBrowser(false)关闭浏览器,DoClose()中也无需返回false来处理窗口关闭信号的发送,直接返回true进入销毁的下一步骤,触发OnBeforeClose()后就可以处理绘制窗口的关闭和清理了。

  1. 用户点击窗口的关闭按钮,此时关闭通知发送到了窗口
  2. 窗口收到通知,但是先不要执行关闭,调用CloseBrowser(false)来发起浏览器关闭
  3. DoClose被触发,返回true,直接走销毁流程
  4. OnBeforeClose()触发后,就可以走窗口的关闭了
  5. 关闭窗口
  6. 如果没有其他browser存在的话,就可以调用CefQuitMessageLoop()来退出了。
http://www.hskmm.com/?act=detail&tid=31661

相关文章:

  • AI一周资讯 251005-251015
  • 2025 年中空百叶源头厂家最新推荐排行榜:聚焦国内优质供货商,助力客户精准选购可靠产品光能/光伏/电动/光动中空百叶厂家推荐
  • 2025年学校家具定制厂家最新权威推荐榜:全屋定制/衣柜/厨柜/酒柜/鞋柜/猫柜/酒店办公家具/电视柜/书包柜/图书架/宿舍上下床
  • iOS框架内存中占用很高的ttc文件是否正常
  • Linux配置SSH名称通信
  • MPC模型预测控制:原理、设计与MATLAB实现
  • 2025年焊接变位机厂家最新权威推荐榜:双轴变位机专业制造商,高效稳定助力智能焊接升级
  • 体育视频分析中的计算机视觉技术创新
  • 2025年法兰罩厂家最新权威推荐榜:专业防护与精密制造,工业管道安全守护者优选品牌
  • 2025 年膜结构厂家最新推荐排行榜:含车棚 / 看台 / 景观等产品实力企业盘点与选择指南
  • 题解:qoj7303 City United
  • 多网融合实战指南:4G、Wi-Fi与以太网的智能协同之道
  • 最佳实践:基于Apache SeaTunnel从MySQL同步到PostgreSQL
  • 2025年冲压件厂家最新权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头实力解析
  • 完整教程:PaVeRL - SQL:基于部分匹配奖励与语言强化学习的 Text-to-SQL 技术
  • 2025年抖音推广服务商最新权威推荐榜:专业运营团队与高转化率方案深度解析,助力品牌精准引流与爆款打造
  • 基于模糊深度信念网络(FDBN)的情感分析实现与优化
  • 2025年卷板机厂家综合推荐榜:折弯机/液压机厂家助力制造业智能化升级
  • Python 实现 Ping 功能
  • 2025年焊接机器人厂家最新权威推荐榜:激光/自动/智能/工业/国产焊接机器人系统、机器人焊接设备、汽车/钢结构/氩弧焊焊接机器人公司精选
  • 2025年保洁公司最新权威推荐榜单:专业家政服务与深度清洁口碑优选,家庭保洁、企业保洁、开荒保洁全方位解析
  • C语言学习——变量
  • RabbitMQ投递回调机制以及策略业务补偿
  • 2025年大连媒体投放公司最新权威推荐榜:覆盖传统媒体/新媒体/户外广告投放的优质服务商深度解析
  • 显卡参数对算力性能的影响
  • 多物理域协同 + 三维 CAD 联动!ADS 2025 解锁射频前端、天线设计新体验
  • win10自带锁屏壁纸和Windows聚焦壁纸路径
  • 读书笔记:时间间隔类型:轻松管理时长与时间点
  • 2025 年最新推荐!除尘器厂家权威排行榜发布,深度解析各品牌技术实力与市场口碑
  • 在浏览器播放多个视频 opencv+Nicegui