CEF简介

CEF(Chromium Embedded Framework)下载以及编译目的为了后续与DuiLib相结合 是一个开源软件框架,用于在另一个应用程序中嵌入浏览器。这使开发人员能够向其应用程序中添加web浏览功能,并能够使用HTML、CSS和JavaScript创建应用程序的用户界面(或只是其中的一部分)。CEF在LinuxmacOS和Windows上运行。它有许多语言绑定,包括C、C++、Go、Java和Python。ChromiumCEF 1和CEF 3。出现后,CEF 2的开发被放弃。CEF 1是基于的单进程实现。它不再得到积极开发或支持。CEF 3是基于的多进程实现,其性能类似于Google Chrome。 阅读详情

一、背景

CEF:chromium embedded Framework是由Marshall Greenblatt在08年成立的一个开源项目,目的是开发一个基于Google Chromium项目的Web browser控制器。CEF目前支持大多数编程语言和操作系统,并可以轻松的整合新的和已存在的应用。设计的目的也是为了效率/性能和方便使用。基础的框架包括了借助原生库的C/C++接口,这样将主机的应用与chromium和WebKit隔离开来。它提供了浏览器控制和主机应用程序(包括支持自定义插件、协议、JavaScript对象和JavaScript扩展)之间紧密的集成。主机应用程序可以有选择地控制资源加载、导航、菜单、打印等,当利用了相同的性能和Google Chrome浏览器具备的HTML5技术。

二、依赖/相关:

CEF项目依靠一堆其它由第三方维护的项目,主要又以下:

  • Chromium:基础,网络堆栈,线程,消息机制,log,进程控制,生成Web browser。
  • WebKit:提供DOM解析,布局,事件处理,渲染,HTML5JS的API。
  • V8:JS引擎。
  • Skia:2D图形库。
  • Angle:3D图形转换,和DirectX有关。

三、版本:

  • CEF1,单进程工具调用chromium Webkit API
  • CEF2,多进程工具建立在Chromium browser
  • CEF3,多进程工具调用Chromium Content API

四、通用API用法:

所有版本的CEF都公开一个简单好用的API(让用户从Chromium和Webkit复杂的代码中分隔开来),详细如下:

  • 1.调用CefInitialize()对CEF初始化。
  • 2.调用CefRunMessageLoop() or CefDoMessageLoopWork()来在UI消息上处理事务。
  • 3.调用CreateBrowser() or CreateBrowserSync()并传递一个CefClient事例来创造一个browser窗口。
  • 4.在程序退出前调用CefShutdown()来关闭CEF。

五、CEF1

CEF1使用单进程架构,并直接将Chromium和Webkit整合到客户端应用程序中。单进程的优点包括了建设内存的使用和进一步与客户端应用的耦合。缺点有某些类型的加载内容性能低,和由于同进程中运行Flash插件的崩溃问题。

1、CEF1 API用法:
  • CefApp,此接口用来传递到CefInitialize(),和允许应用程序定制全局,如资源加载,代理。
  • CefClient,此接口用来传递到CefCreateBrowser() or CefCreateBrowserSync(),和充当单独CEF Browser事例和客户端应用程序的连接,也负责请求和显示处理的接口
  • CefBrowser,公开由浏览器提供的功能。包括前进后退导航,来源检索,加载请求等,一个CefBrowser可能有一到多个子类的CefFrame对象
2、线程注意事项

CEF1包括UI,IO和FILE线程。 UI线程创建Browser窗口,用来所有与WebKit和V8的交互,IO线程用来处理模式和网络请求。 FILE线程用于应用程序缓存和其他各种活动。

当使用CEF1时,你应该记住以下线程考虑:

  • 不要在UI线程上执行会造成阻塞的操作。这将导致严重的性能问题。
  • 如果CefInitialize()通过值为false的CefSettings.multi_threaded_message_loop被调用,那么UI线程将和主线程一样。
  • 所有WebKit和V8互为作用必须在UI线程上进行。因此,有些CEF API函数只能在UI线程上调用。有相同限制的功能会被相应地记录并关联到CEF的头文件里。
  • CefPostTask方法可以用来动态同步地进行不同线程里的任务。
3、实施细则

CEF1主要有以下实现类:

  • CefContext 代表全局CEF内容。单个CefContext对象是由CefInitialize()创建,由CefShutdown()销毁
  • CefProcess 由CefContext创建和管理的CEF线程。
  • BrowserWebKitInit 管理全局WebKit环境作为Chromium WebKit API暴露。
  • WebViewHost 提供本地窗口“wrapper”工具给WebView。这个类扩展了,提供和在某些平台上弹出部件(如选择菜单)一样的功能,WebWidgetHost。
  • CefBrowserImpl 实现CefBrowser的接口,创建WebViewHost,并提供了但个Browser实例的粘合代码。
  • BrowserWebViewDelegate 实现WebKit接口,提供CefBrowserImpl和底层的WebView之间的通信。

六、CEF3

CEF3借助Chromium Content API使用和Chromium Web 浏览器一样的多进程架构,相比于单进程的CEF1,他具有更多的优势。

  • 同时支持单进程和多进程模式。
  • 更多的代码分析通过Chromium浏览器
  • 改进的性能和由于代码路径的支持而减少的损坏
  • 新特性的快速获取
  • 大多数情况下,CEF3和Chromium浏览器拥有相同的性能和稳定特征。
1、API用法

CEF3的初始化需要考虑多进程。在Windows和Linux上的所有进程享有相同的可执行文件,或选择使用单独的可执行文件的子进程(借助CefSettings.browser_subprocess_path的值)。在Mac OS-X的所有的子进程都必须绑推一个分开的app使用。这是必要的因为在Mac OS-X的子进程必须有一个不同的Info.plist文件。

CefExecuteProcess()函数是负责执行子过程的逻辑。它检查“类型”的命令行标志来决定目前正在执行的进程类型。如果被browser进程调用(识别为没有“类型”的命令行值)它会立即返回一个为-1值。如果被调用且认为是次级进程,它会阻塞直到该进程应该退出,然后返回进程的退出代码。如果执行browser进程,应用程序会继续在标准进程初始化,被描述为“通用API的用法”部分。将cef_app.h理解为一个完成的的功能初始化和用法的描述。将Wcefclient_win.cpp wWinMain功能视作一个窗口例程。

“单进程”命令行标志或者CefSettings.single_process的值可用在一个单一的进程中运行CEF3。这是有用于调试目的,但不建议用于生产。

2、下面是主要CEF3接口和它们的用途的概述:
  • CefApp,此接口用来传递到CefInitialize(),和允许应用程序定制全局,如资源加载,代理。一些功能是由所有进程共享的,有些必须实现浏览器的过程中,必须在渲染过程中执行。见详情头文件的意见。
  • CefClient,此接口用来传递到CefCreateBrowser() or CefCreateBrowserSync(),和充当单独CEF Browser事例和客户端应用程序的连接,也负责请求和显示处理的接口。请求处理,显示处理等额外的接口,通过这个接口暴露。
  • CefBrowser,公开由浏览器提供的功能。包括前进后退导航,来源检索,加载请求等,一个CefBrowser可能有一到多个子类的CefFrame对象。在一个特定的过程或一个特定的线程必须调用一些方法,所以仔细阅读文档。
  • CefBrowserHost - 公开有关运行browser进程中唯一可用的browser窗口的功能。例如,检索本地父窗口句柄,或销毁browser窗口。
  • CefRenderProcessHandler - 公开WebKit和V8对渲染进程中应用程序的集成能力。通过CefApp返回此对象的一个​​实例。
3、CEF3主要有以下实现类:
  • CefMainDelegate 实现通用进程的引导逻辑。
  • CefContentClient 实现所有进程中共同的Content API回调。
  • CefContext 代表全局CEF内容在browser进程中。单个CefContext对象由CefInitialize()创建并由CefShutdown()销毁。
  • CefBrowserMainParts 实现browser进程中的引导逻辑。
  • CefContentBrowserClient 实现browser进程的ContentAPI回调。
  • CefBrowserHostImpl 实现在browser进程中CefBrowser和CefBrowserHost的接口。提供粘合代码和工具的借口来和RenderViewHost通信。
  • CefContentRendererClient 实现渲染进程中的ContentAPI回调。
  • CefBrowserImpl 实现渲染进程中的CefBrowser接口。提供粘合代码和工具的借口来和RenderView通信。
CEF使用教程(一)准备 QT中如何集成CEF浏览器控件进行网页的嵌套,本文介绍如何一步一步编译CEF,并为后续使用提供帮助,CEF全称Chromium Embedded Framework是基于Google Chromium项目的开源Web浏览器控件,支持Windows, Linux, Mac平台。除了提供C/C++接口外,还提供给了其他语言的支持。 阅读详情

相关推荐

CEF(Chromium Embedded Framework)使用说明书

CEF使用说明书 目录 1 前言 1.1 CEF的作用 1.2 CEF的下载和编译 1.3 CEF结构 1.3.1 CEF进程和窗口之间的结构关系 1.3.2 Renderer进程的实现结构 1.3.3 browser进程的实现结构 1.4 CEF多进程和多线程 1.4.1 进程 1.4.2 线...

baochunlei1的博客 3793

Chromium Embedded Framework3

CEF是2008年由马歇尔·格林布拉特(Marshall Greenblatt)创立的bsd授权开源项目,基于谷歌Chromium项目。与主要关注谷歌Chrome应用程序开发的Chromium项目本身不同,CEF主要是促进在第三方应用程序中去嵌入浏览器使用。CEF通过提供产品质量稳定的api、发布跟踪特定的Chromium版本的分支和二进制发行版,将用户与底层的浏览器实现和Blink代码复杂性隔离开来。CEF支持广泛的编程语言和操作系统,可以很容易地集成到新的和现有的应用程序中。主要提供C、C++的接口,也支持其他语言。它提供了浏览器与主机应用程序之间的紧密集成,包括对自定义插件、协议、JavaScript对象和JavaScript扩展的支持。主机应用程序可以选择性地控制资源装载、导航、上下文菜单、打印等,同时利用谷歌Chrome Web浏览器中可用的相同性能和HTML5技术。

CEF4Delphi 简介

兼容性CEF4Delphi是Salvador Díaz Fau创建的一个开源项目,是将基于Chromium的浏览器嵌入到用Delphi或Lazarus/FPC为Windows、Linux和MacOS制作的应用程序中。CEF4Delphi基于DCEF3和fpCEF3。这些项目的原始许可证仍然适用于CEF4Delphi。写本文时,CEF4Delphi使用CEF 130.1.7,Chromium版本130.0.6723.59。

tanqth的专栏 3430

CEF详解

Chromium Embedded Framework (CEF)是个基于Google Chromium项目的开源Web browser控件,支持Windows, Linux, Mac平台。除了提供C/C++接口外,也有其他语言的移植版。 因为基于Chromium,所以CEF支持Webkit& Chrome中实现的HTML5的特性,并且在性能上面,也比较接近Chrome。 CEF还提...

顺其自然~专栏 2万+

Chromium Embedded Framework (CEF) 介绍

Chromium Embedded Framework (CEF) Chromium Embedded Framework(CEF)是一个开源软件框架,用于在另一个应用程序中嵌入Chromium web浏览器。这使开发人员能够向其应用程序中添加web浏览功能,并能够使用HTML、CSS和JavaScript创建应用程序的用户界面(或只是其中的一部分)。

L-Super的博客 7294

cef简介

1、CEF是Chromium Embedded Framework的缩写,是基于Google Chrominum项目开发的一个web浏览器控件。https://code.google.com/p/chromiumembedded/ CEF是开源的,可以下载源码,去掉自己不需要的模块,然后自己编译,也可以直接使用CEF提供的库,CEF提供的库是libcef.dll,很多程序都有libce...

Christt3958的博客 912

CEF127 编译指南 MacOS 篇 - CEF 简介(一)

CEF 是一个基于 Chromium 项目的开源框架,它允许开发者将 Chromium 浏览器的核心功能嵌入到其他应用程序中。自 2008 年诞生以来,CEF 已经成为最流行的嵌入式浏览器框架之一,被 Discord、Spotify 等知名应用广泛使用。主进程:负责窗口管理和用户界面渲染进程:负责网页内容的渲染插件进程:处理插件相关的任务GPU 进程:处理图形加速相关的任务通过本文的介绍,我们了解了 CEF 的基本概念、特点、架构以及在 MacOS 环境下的编译准备要求。

守城小轩的技术窝棚 913

CEF127 编译指南 Linux篇 - CEF简介(一)

CEF 是一个基于 Chromium 项目的开源框架,它允许开发者将 Chromium 浏览器的核心功能嵌入到其他应用程序中。自 2008 年诞生以来,CEF 已经成为最流行的嵌入式浏览器框架之一,被 Discord、Spotify 等知名应用广泛使用。主进程:负责窗口管理和用户界面渲染进程:负责网页内容的渲染插件进程:处理插件相关的任务GPU 进程:处理图形加速相关的任务通过本文的介绍,我们了解了 CEF 的基本概念、特点、架构以及在 Linux 环境下的编译准备要求。

守城小轩的技术窝棚 1028

CEF132 编译指南 Windows篇 - CEF简介(一)

在接下来的《CEF 132 编译指南 Windows 篇 - 安装 Visual Studio 2022 (二)》中,我们将深入探讨如何正确安装和配置 Visual Studio 2022,为后续的 CEF 编译工作奠定坚实的基础。Chromium 嵌入式框架(CEF)应运而生,它基于 Google 的 Chromium 开源项目,为开发者提供了完美的解决方案。本文将作为 CEF 132 编译系列指南的开篇,重点介绍 CEF 的基础知识,为后续在 Windows 平台上的编译工作做好铺垫。

守城小轩的技术窝棚 896

CEF编译指南2024 Windows篇-CEF简介(一)

通过本文的介绍,我们了解了CEF的基本概念、特点、架构以及应用场景。在下一篇文章《CEF编译指南2024 Windows篇-安装Visual Studio2022(二)》中,我们将详细介绍如何正确安装和配置Visual Studio 2022,为CEF的编译工作做好准备。许多开发者希望能够在传统桌面应用中嵌入Web内容,既保留了原生应用的性能优势,又能享受Web开发的便利性。CEF是一个基于Chromium项目的开源框架,它允许开发者将Chromium浏览器的核心功能嵌入到其他应用程序中。

守城小轩的技术窝棚 1808

CEF中文教程(google chrome浏览器控件) -- CEF简介

官方主页:  点击打开链接 CEF简介:     嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件。CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去。   它的设计思想政治就是易用且兼顾性能。CEF基本

1万+

CEF中文教程(google chrome浏览器控件) -- CEF简介

官方主页:  点击打开链接 CEF简介:     嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件。CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去。   它的设计思想政治就是易用且兼顾性能。CEF基本的框架包

daoxwj的专栏 10万+

cisco 下CEF(简介)

CEF(Cisco Express Forwarding,Cisco特快交换)技术是思科公司推出的一种全新的路由交换方案,它具有良好的交换性能,增强的交换体系结构和极高的包转发速率。 1.CE F特快交换基本原理 (1)CEF转发过程 3层包从TCAM开始查找;进行最长匹配,得到邻居信息,改写原有二层数据帧(下一跳MAC地址)并转发。 CEF表是从路由表得来,邻...

weixin_34408624的博客 768
上一篇: OAuth简介
下一篇: Thinkpad中F键切换
man_of_sillyy
博客等级 码龄11年 24粉丝 37原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值