官方主页:  点击打开链接

CEF简介: 

   嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件。CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去。

  它的设计思想政治就是易用且兼顾性能。CEF基本的框架包含C/C++程序接口,通过本地库的接口来实现,而这个库则会隔离宿主程序和Chromium&Webkit的操作细节。它在浏览器控件和宿主程序之间提供紧密的整合,它支持用户插件,协议,javascript对象以及javascript扩展,宿主程序可以随意地控件资源下载,导航,下下文内容和打印等,并且可以跟Google Chrome浏览器一起,支持高性能和Html5 技术,


CEF指南:


指南:

  首先把这段代码插入到窗口的创建函数里面去:

[cpp] view plaincopyCEF中文教程(google chrome浏览器控件) — CEF简介-编程知识网CEF中文教程(google chrome浏览器控件) — CEF简介-编程知识网

  1. // Create an instance of our CefClient implementation. Various methods in the  
  2. // MyClient instance will be called to notify about and customize browser  
  3. // behavior.   
  4. CefRefPtr<CefClient> client(new MyClient());  
  5.   
  6. // Information about the parent window, client rectangle, etc.  
  7. CefWindowInfo info;  
  8. info.SetAsChild(…);  
  9.   
  10. // Browser initialization settings.  
  11. CefBrowserSettings settings;  
  12.   
  13. // Create the new browser window object asynchronously. This eventually results  
  14. // in a call to CefLifeSpanHandler::OnAfterCreated().  
  15. CefBrowser::CreateBrowser(info, client, "http://www.google.com", settings);  

这段代码你可以在[test]文件夹下面的cefclient工程里面看到。

文件结构:

  include — 这个文件夹里面放CEF客户应用程序所需的头文件

  libcef — 此文件夹存放CEF的静态库

  libcef_dll — 此文件夹CEF的动态拉链库

  tests — 此文件夹存放测试的例子

       cefclient — 一个简单的客户程序

       unittests —  CEF界面单元测试

浏览器事件:

应用程序通过调用CefBrowser和CefFrame的方法来处理浏览器控件事件:

a.Back, Forward, Reload and Stop Load。控件浏览器的导航

b.Undo, Redo, Cut, Copy, Paste, Delete, Select All.控件目标框架的选取

c.Print。打印目标框架

d.Get Source。以字符串的形式来获取目标框架的HTML源码

e.View Source. 用缓存文件来保存目的框架的HTML源码,并且用系统默认的文本查看器打开

f.Load URL.加载特定的URL到目标框架

g.Load String. 加载一个特定的字符串到目标框架,通过一个随意指定的虚拟URL

h.Load Stream. 加载一个特定的二进制文件到目标框架,通过一个随意指定的虚拟URL

i.Load Request, 加载一个特定的请求到目标框架

j.Execute JavaScript: 在目标框架里面执行一个特定的Javscript命令

k. Zoom。 缩放特定框架的网页内容

插入网景风格插件:

CEF支持插入网景风格的插件,插入插件的动作跟正常插入基本动态链接库的插件一样,但是做为一个单独的Dll,必须通过容器来创建,并且要用CefRegisterPlugin()这个函数来注册到系统里面去。你要调用这个函数的话,你就得包含cef_nplugin.h这个头文件。

JavaScript扩展:

CEF支持能连接本地程序源代码的Javascript扩展,演示程序你可以去看cef_v8.h进而的CefRegisterExtension()方法,还有CEFClient下面的演示例子,你如果想得到更多的信息,可以点下面的链接:  JavaScriptIntegration。

用户计划:

CEF支持注册和处理像myscheme://mydomain一样的用户计划,你可去查看cef_scheme.h里面的CefRegisterScheme()和Scheme Handler测试单元,得到详细的说明。

框架总览:

所有的文件前缀都是Cef

框架的建立和销毁:

CEF的UI消息寄宿在一个框架建立的单线程中,用户只负责用CefInitialize()和CefShutdown()来建立和销毁这个线程,但是你如果设置了CefSettings.multi_threaded_message_loop, 这个UI消息循环也可以运行在一个单独的线程里面。

引用计数:

所有的框架数都从CefBase这个基类继承而来,并且所有的实例指针都用CefRefPtr智能指针来管理,可以用AddRef()和Release()函数来自动处理引用计数。

平台无关:

CEF框架被设计成平台无关的,现在它支持Windows,Mac os-x和Linux,为了无缝地支持多种平台,框架定义了一系列的平台无关的接口和类型定义。

框架接口:

CefBrowser是主要的浏览器窗口类,可以用静态的函数CreateBrowser() 和CreateBrowserSync() 来创建一个新的浏览器窗口。 CefFrame 代表一个浏览器窗口的框架,每个浏览器窗口有一个顶层的主框架,而这个主框架可以用GetMainFrame() 方法得到。 CefClient是主浏览器窗口的代表接口,这个接口做为参数传递给CreateBrowser() CefRequest 代表URL,方法,发送数据和头文件等这样的请求。 CefSchemeHandleFactory 类是被用来处理像myscheme://mydomain类似客户计划的请求       CefReadHandler和CefWriteHandle是一个读写数据的简单接口。

CefV8Handler,CefV8Value和CefV8Context是被用来创建和访问JavaScript对象。

以上内容是Cef的简介,后面我将翻译怎么编译并生成一个用CEF控件来创建的一个简单浏览器!

CEF中文教程(google chrome浏览器控件) — CEF编译

    这部分讲解CEF的分支信息并介绍下载编译和打包源代码

背景:

CEF项目是做为Chromium的扩展项目而存在的,CEF跟Chromium一样地维护两个版本,开发版和发布版。CEF源代码既可以手动编译,也可以用工具自动编译

发展:

CEF项目在不断的发展中,你可以从这里看到整个项目的文件trunk,因为当前的版本紧跟Chromium,所以不推荐拿当前的版本来开发发布版的产品。下面的链接可以用来下载CEF的开发版源码: CEF1- http://chromiumembedded.googlecode.com/svn/trunk/cef1 CEF3- http://chromiumembedded.googlecode.com/svn/trunk/cef3 remind:你点开上面的链接时,你会发现这是一个svn工程的目录,如果以前是用VSS的,你可能觉得svn很陌生,不要尝试一个一个地去下载里面的文件。这里有个简单的方法可以下载整个文件夹:先下载一个TortoiseSVN,下完后安装,但是你不会看到有什么的TortoiseSVN的运行程序,因为它是内嵌到Windows里面的,你应该在任意的盘符下面创建一个空的文件夹,右键点击这个文件夹,点击菜单项【TortoiseSVN】->【export】,在URL文件框里面输入上面的链接后点确定,然后现在个工程文件都会下下来。

发布版:

CEF随着Chromium发布版也提供一个最新的发布版,推荐用户用发布版本做为开发产品的环境,原因有如下几点: 1.二进制的CEF是用特定的Chromium发布版编译出来的 2.发布版的CEF/Chromium经过了更好的测试,而且更加适合开发发布版的应用程序 3.发布版更加稳定 4.CEF发布版可以包含必要的Chromium/WebKit版本 5.CEF以后的更新不会干扰用户的发布计划
CEF版本号有如下形式:X.Y.Z,其中X是CEF主版本号,Y是发布版版本号,而Z是CEF校对号,有关CEF和Chromium版本更详细的内容,你可以去include/cef_version.h里面找到,下面的表格列出当前的CEF发布版本:

发布版本 Chromium版本 CEF1支持性 CEF3支持性
963 17
1025 18
1084 19
1180 21
1271 23
1364 25
1453 26

你可以在下面的链接中下载发布版的CEF, 其中YYYY是发布版的版本号: CEF1 – http://chromiumembedded.googlecode.com/svn/branches/YYYY/cef1 CEF3 – http://chromiumembedded.googlecode.com/svn/branches/YYYY/cef3
这里值得注意的是版本963和1025是只包含有CEF1的源代码,要想了解CEF发布版的版本号怎么来的,你可以点击旁边这个链接: here

编译源代码:

当前支持在Windows,Mac OS-X和Linux环境下编译源代码,而要想编译成功,你的电脑必须至少有4GB的系统内存(因为我用的Windows,所以在Mac或Linux环境下的要求我就没有翻译了)。 在编译Chromium和CEF源码之前,你必须配置好你的编译环境:

1.为你的操作系统和开发环境安装必要的包:

Windows环境下点击右边的链接: http://www.chromium.org/developers/how-tos/build-instructions-windows(这个我将在下一章中给出译文) 配置好操作系统和编译环境以后,还要用旁边的链接去下载TortoiseSVN工具: http://sourceforge.net/projects/tortoisesvn/files/1.6.16/Application/

2.配置环境可以影响GYP

CEF目前还不支持组件开发 Windows – 如果你的操作系统里面安装了多个Virual Studio,你可以设置环境变量GYP_MSVS_VERSION为一个适当的值,如果你想用VS2008来编译工作,你应该把这个值设成2008,如果你想用Vs2010 Express来编译工程,那你就应该把这个环境变量设成2010e, 如果是别的Visual Studio版本,那你就要去Chomium帮助文档去查找更详细的信息,但是估计也应该是同一个套路,假如你是vs2005,那肯定就是设成2005了。

自动的方法:

CEF提供工具,用来自动下载、编译、打包Chromium和CEF源代码,这个方法对开发版和发布版是同样有用,你可以按下面的步骤来完成自动操作:

1.下载自动工具 automate.py:

用SVN checkout下面的URL: 

<span class="pln">http</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="com" style="color: rgb(136, 0, 0);">//chromiumembedded.googlecode.com/svn/trunk/cef1/tools/automate /path/to/automate</span>

2.运行automate.py脚本:

在任何合适的时间,你可以运行automate.py这个脚本(如每周每天每次CEF提交的时间),并使用你想要的CEF版本。

<span class="pln">python </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">automate</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">automate</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln">py </span><span class="pun" style="color: rgb(102, 102, 0);">--</span><span class="pln">download</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln">dir</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="str" style="color: rgb(0, 136, 0);">/path/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">download </span><span class="pun" style="color: rgb(102, 102, 0);">--</span><span class="pln">url</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln">http</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="com" style="color: rgb(136, 0, 0);">//chromiumembedded.googlecode.com/svn/branches/1084/cef1</span>

如果这个操作成功了,一个二进制形式的包会被创建在  /path/to/download/chromium/src/cef/binary_distrib 如果你要想查找完整的使用介绍,点下面的链接:  automate.README.txt     这个方法也被完美地整合到了一些自动编译系统如 TeamCity (译完这段我感到浑身冷汗,因为什么TeamCity、TortioseSVN…全都一无所知,想想从业也三四年了,却离it这条路越走越远,在上个公司呆的两年多完全是封闭的两年多,天天整些CAD,用写好的API,做些重复的工作,什么新的技术都没学到,反而把老本都蚀完了,现在是时候奋起直追了。但转念一想,我还能再追几年,以我的年纪我还能追几年? 学什么走哪块,才能让我虽不说蒸蒸日上但却能有口盒饭吃呢?)

手动下载:


    Chromium和CEF可以手动下载和编译,但这更加复杂,所以不向所有用户推荐。

开发版:

    下面这些下载的介绍仅适合CEF1&CEF3开发版。      1.安装depot_tools并且下载Chromium源代码,你可以按照这个链接的内容来做http://dev.chromium.org/developers/how-tos/get-the-code,也可以按照下面的四个步骤来做,但是为了避免一些潜在的问题,你最好设置chromium和depot_tools的下载目录尽可能的短,并且不要包含空格和特殊字符。      A.  装一个1.6.x版本的SVN端,并且加到你的PATH里面去      B. 通过SVN来下载depot_tools

<span class="pln">  svn co http</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="com" style="color: rgb(136, 0, 0);">//src.chromium.org/svn/trunk/tools/depot_tools</span>

     C. 增加depot_tools的目录到你的PATH,在Windows下depot_tools的路径应该要放在TortoiseSVN的前面     D. 创建一个Chromium签出目录(例如,/path/to/chromium),并且配置gclient如下:

<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium
gclient config http</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="com" style="color: rgb(136, 0, 0);">//src.chromium.org/chrome/trunk/src</span>

     remind:  上面这段你只要复制到cmd里面去运行就可以了
2. 在CEF的顶层目录下查看CHROMIUM_BUILD_COMPATIBILITY.txt,并找到你需要的Chromium版本,这可能会发生改变,因为CEF是随着最新版本的Chromium改变而改变的    3. 更新Chromium到合适的版本

<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium
gclient sync </span><span class="pun" style="color: rgb(102, 102, 0);">--</span><span class="pln">revision src@chromium_revision </span><span class="pun" style="color: rgb(102, 102, 0);">--</span><span class="pln">jobs </span><span class="lit" style="color: rgb(0, 102, 102);">8</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">--</span><span class="pln">force</span>

   4. 下载CEF源代码到"cef"文件夹,而且这个文件夹必须包含在Chromium的"src"文件夹目录下,你最好只下载CEF1或CEF3而不要两者都下,假设你的Chromium源代码下载在"/path/to/chromium/src",那么你的CEF源代码就应该放在"/path/to/chromium/src/cef"。注意不管你下的是CEF1或CEF3,文件夹名都必须命名为"cef"

<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">src
svn co http</span><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="com" style="color: rgb(136, 0, 0);">//chromiumembedded.googlecode.com/svn/trunk/cef1 cef</span>

发布版:

     发布版和开发版基本的操作是一样的,只不过是把有Debug的地方改成Release而已。具体的你可以查看原文链接。

手动编译:

    1.运行cef_create_project脚本(windows下用.bat, OS-X和linux下用.sh)去产生一个在GYP配置下的编译文件

<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">src</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">cef
</span><span class="pun" style="color: rgb(102, 102, 0);">./</span><span class="pln">cef_create_projects</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln">sh</span>

    2.编译CEF

    windows下你可以直接用Visual Studio 的.sln文件编译,做为替代的方法,你也可以在命令行下运行脚本build_projects来编译整个工程,

<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">src</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">cef</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">tools
build_projects</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln">sh </span><span class="typ" style="color: rgb(102, 0, 102);">Debug</span>

手动打包:

     当编译好开发版和发布版后,你可以用make_distrib工具(windows用.bat,OS-X和Linux用.sh)去创建一个二进制分发包。

<span class="pln">cd </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">path</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">to</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">chromium</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">src</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">cef</span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln">tools
make_distrib</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln">sh</span>

     如果这个过程成功了,一个二进制的分发包会生成在/path/to/chromium/src/cef/binary_distrib目录中。      你可以去make_distrib.py脚本下看到更多的使用信息。

一般用法

使用CEF便捷的创建一个全功能的内建浏览器如下所示:

// Define an instance of our CefHandler implementation. Various methods in the MyHandler // instance will be called to customize browser behavior.  CefRefPtr<CefHandler> handler(new MyHandler()); // Provide information about the parent window, client rectangle, etc. CefWindowInfo info = {...}; // Create the new browser window object, which eventually results in a call to // MyHandler::HandleAfterCreated(). CefBrowser::CreateBrowser(info, false, handler, L"http://www.google.com");

在tests目录下有一个客户端程序的示例,叫cefclient。

文件结构

CEF资料库结构如下:

  • include — 包括用于CEF客户端程序的include文件。
  • libcef — libcef实现。
  • libcef_dll — libcef C API 和 DLL 实现.
  • tests — 测试程序.
    • cefclient — CEF客户端应用程序示例。
    • unittests — CEF接口单元测试。

浏览器通知

浏览器通知是通过注册的委托接口由浏览器发到客户端程序的通知, CefHandler是最主要的委托接口, CefJSHandler则用于实现自定义的Javascript对象。

CefHandler支持以下接口:

  • 窗口创建之前 (HandleBeforeCreated),客户端可用之取消与定制浏览器窗口创建过程。
  • 窗口创建之后(HandleAfterCreated). 可用于创建自定义的CefJSHandler对象。
  • 地址栏更新(HandleAddressChange). 将地址栏更改为指定的字符串,通知发生于导航提交后与页面加载前。
  • 标题更新(HandleTitleChange). 将标题更改为指定的字符串,发生在页面加载中。
  • 浏览前(HandleBeforeBrowse). 可用于取消导航,该事件的信息包括URL,Post数据,请求头.
  • 开始加载(HandleLoadStart). 
  • 加载结束 (HandleLoadEnd). 
  • 加载错误(HandleLoadError). 加载过程中遇到错误,应用程序可提供自定义的错误页面.
  • 资源加载前 (HandleBeforeResourceLoad). 应用程序可提供替代的数据源 (比如内存中的缓存)或者取消加载.
  • 显示菜单前(HandleBeforeMenu). 可用于取消上下文菜单显示或定制菜单,默认情况下,浏览器根据上下文显示基本的菜单.
  • 获取菜单标签(HandleGetMenuLabel).在默认菜单显示前,每个菜单项调用一次,可用于将英文默认内容改为其它语言.
  • 菜单动作(HandleMenuAction). 用户从默认上下文菜单选择了一个选项,可用自己的方式来处理动作。
  • 打印选项(HandlePrintOptions). 打印设置对话框显示前调用,可用于定制页面大小、方向与边距等.
  • 打印页眉页脚 (HandlePrintHeaderFooter). 在页面视图输出到打印上下文,但是页面结束前,可在预定义的6个位置(上左、上中、上右、下左,下中,下右)插入自定义的页眉、页脚字符串。该事件附带的信息包括当前URL、标题、页码、总页数、打印上下文、页边距与DPI拉伸比.
  • JavaScript警告 (HandleJSAlert). 应用程序可自定义Javascript Alert窗口.
  • JavaScrip确认 (HandleJSConfirm). 应用程序可自定义Javascript Comfirm窗口
  • JavaScrip提示 (HandleJSPrompt). 应用程序可自定义Javascript Prompt窗口
  • JavaScript Window 对象绑定 (HandleJSBinding). 应用程序将用户定义的方法和变量附加到frame的window对象上
  • Window关闭前 (HandleBeforeWindowClose). 窗口关闭前
  • 获得焦点(HandleTakeFocus). 浏览器组件失去焦点前调用
  • 设置焦点(HandleSetFocus). 浏览器组件请求焦点前调用
  • 键盘事件(HandleKeyEvent). 浏览器组件接收到键盘事件时
  • 提示 (HandleTooltip). 用于修改tooltip文字
  • 控制台消息 (HandleConsoleMessage). 用于显示控制台消息.
  • 查询结果(HandleFindResult).用于自定义查找结果显示处理

CefV8Handler支持以下通知:

  • 执行事件(Execute). 应用程序执行指定的函数,该事件提供所有的Javascript参数,而且应用程序能指定返回值

浏览器事件

浏览器事件由客户端应用程序通过CefBrowser和CefFrame的函数发送给浏览器:

  • 后退、前进、重新加载与停止加载,用于控制浏览器导航.
  • 撤消、重做、剪切、复制、粘贴、删除、全选,用于控制目标区域内容.
  • 打印. 打印目标框架.
  • 查看源代码. 将目标框架的HTML源代码保存到临时文件,并用默认的文本查看程序打开之
  • 加载URL. 在指定框架中加载指定URL
  • 载入字符串. 根据一个假URL在指定框架中加载某个字符串
  • 加载流. 根据一个假URL,在指定框架中加载二进制数据
  • 加载请求. 在指定框架中加载请求(URL, method, request data 与 headers) .
  • 执行脚本. 在目标框架中执行任意Javascript命令

内嵌 NPAPI 插件

CEF支持创建Netscape-style内嵌插件,使用相同 NPAPI的内嵌插件和标准的DLL插件行为相同,但是,相对于使用独立的DLL,内嵌插件由容器应用程序创建,并通过调用CefRegisterPlugin()注册到系统,如果要直接使用这一功能,需要include cef_nplugin.h .

JavaScript扩展

CEF支持可以和原生应用程序代码交互的Javascript扩展,参见cef.h的CefRegisterExtension() 函数和cefclient示例程序的"JavaScript Extension Handler" 以及 "UI App Example" 测试 .

自定义Schemes

CEF支持注册与处理自定义scheme,类似于myscheme://mydomain。参见cef.h中的CefRegisterScheme()函数与示例应用程序cefclient中的 "Scheme Handler" 测试.

框架实现概览

CEF所有的类以Cef为前缀.

框架准备与拆卸

UI消息循环由框架创建的一个单独线程处理,客户端程序应负责通过分别调用CefInitialize()和CefShutdown() 来为每个进程准备与关闭这一线程。

引用计数

所有实现了CefBase接口的框架类与对象指针都由CefRefPtr智能指针实现来处理,通过调用AddRef()和Release()自动处理引用计数。

平台无关

CEF框架被设计成平台无关,需要当前我们仅支持windows平台,但是我们计划将来支持其它平台。为了尽可能减少双平台支持带来的麻烦,框架定义了一系列实现无关的接口与类型定义包装跨平台的行为。

线程安全

框架的所有接口实现必须是跨线程访问安全的,CefThreadSafeBase 模版提供原子的AddRef() 和 Release() 实现,还提供Lock() 和 Unlock()方法以同步方式访问代码块.

框架接口

框架定义了如下接口:

  • CefBrowser 是主要的浏览器host类,通过它的静态方法CefBrowser::CreateBrowser()方法创建新浏览器窗口.
  • CefFrame 表示浏览器窗口里的一个框架(frame),每个浏览器窗口都有一个顶级的主框架,可通过CefBrowser::GetMainFrame()方法访问之.
  • CefHandler 是传给CefBrowser::CreateBrowser()方法的最主要委托接口.
  • CefRequest 表示请求数据,比如url, method, post data 和 headers.
  • CefPostData 和 CefPostDataElement 表示可能是请求一部分的post数据.
  • CefSchemeHandlerFactory 和 CefSchemeHandler 用于处理像myscheme://mydomain这样的自定义scheme.
  • CefStreamReaderCefStreamWriterCefReadHandler 和 CefWriteHandler 读写数据的简单的接口.
  • CefV8Handler 和 CefV8Value 用于创建和访问Javascript对象.