美文网首页
CEF GeneralUsage

CEF GeneralUsage

作者: 董哒哒 | 来源:发表于2016-05-05 20:53 被阅读1237次

    CEF GeneralUsage

    简介

    Chromium Embedded FrameWork(CEF) 是一个基于 Chromium 的开源项目。它与 Chromium 的不同之处在于,Chromium 项目服务于 Chrome 浏览器;而 CEF 则是为第三方程序提供嵌入式浏览器框架。CEF 适用的场合有:

    • 在已有的本地程序中嵌入 支持 HTML5 的浏览器控件;
    • 创建一个轻量级的 "壳"程序,在此基础上可以使用 Web 技术来进行 UI 开发;
    • "离屏渲染", 例如在后台加载一个很大的网页,然后直接展示它,避免页面在前台加载很长时间;

    CEF3 是 CEF 的最新版本,它基于 Chromium Content API

    本文介绍了使用 CEF3 进行程序开发时所涉及的常见概念。

    开始

    二进制版本

    要体验 CEF,可以先从 这个页面 下载二进制版本。下载完成后解压,有以下几个目录:

    • cefclient : 包含了一个基于二进制 CEF 库开发的示例程序 cefclient。这个程序使用了 CEF 的大部分功能;
    • cefsimple : 包含了一个基于二进制 CEF 库开发的示例程序 cefsimple。这个程序只是使用 CEF 创建了一个浏览器窗口;
    • include : CEF 头文件;
    • Debug/Release : 编译好的 CEF 共享库 libcef.dll 及其他必要的共享库;
    • libcef_dll : 包含了用于生成 libcef_dll_wrapper.lib 静态库的代码。使用了 CEF C++ API 的程序必须链接这个静态库。关于 "C++ Wrapper" 的内容会在以后的章节介绍;
    • Resources : 资源文件夹。基于 CEF 开发的程序需要这些资源文件才能运行;

    二进制版本需要编译才能生成 cefclient.exe 和 cefsimple.exe, 编译方法参考 Tutorial,或者直接查看根目录的 CMakeList.txt 文件。

    源代码版本

    也可以直接编译 CEF 源码。编译方法参考 BranchesAndBuilding

    重要概念

    正式开始之前,有几个关于 CEF 的重要概念要先了解一下:

    C++ Wrapper

    libcef.dll 共享库导出的是 C API。对于需要使用 C++ API 的程序来说,就需要使用 libcef_dll_wrapper 项目来做封装。它会将 C API 封装成 C++ API,然后将 API 链接到客户端程序中。C/C++ API 之间的转换层代码是由 translator 工具自动完成的。

    当然,直接使用 C API 也是可以的,具体内容请参考 UsingTheCAPI

    进程

    CEF3 以多进程的形式运行。主进程(也被叫做 "browser" 进程)负责处理窗口创建、绘制、网络访问等操作,另外宿主程序的业务逻辑也运行在 browser 进程中;Blink 渲染、JavaScript 脚本执行由另一种 "render" 进程负责,默认的 进程模型 会为每个站点创建一个 "render" 进程;其他类型的进程只在需要时创建,比如 "plugin" 进程用于运行插件(比如 Flash);"gpu" 进程用于处理 accelerated compositing

    默认情况下,主程序的可执行文件会被多次调用,创建出多个独立的进程,有的是 "browser" 进程,有的是 "render" 进程。程序通过命令行来区分自身代表的是哪种进程,进而执行对应进程的操作。如果可执行文件很大、加载很慢,也可以让 非"browser"进程 通过另一个独立的可执行文件来创建。这种配置需要在 CefSettings.browser_subprocess_path variable 里进行设定,更多信息请参考接下来的 "Application Structure" 章节。

    各个进程可以使用 Inter-Process Communication(进程间通信) 机制来交互。browser 和 render 进程里的程序逻辑,通过发送异步消息的方式来通信。

    线程

    相关文章

      网友评论

          本文标题:CEF GeneralUsage

          本文链接:https://www.haomeiwen.com/subject/elgdrttx.html