首页 > cef > CEF-如何创建一个简单的CEF程序(Tutorial翻译)
2017十月9

CEF-如何创建一个简单的CEF程序(Tutorial翻译)

[隐藏]

本wiki解释怎么使用CEF3创建一个简单的程序


1.介绍

本教程介绍如何使用CEF3创建一个简单的应用程序。 它引用了cefsimple示例项目。 有关完整的CEF3使用信息,请访问GeneralUsage Wiki页面。

 

2.入门

CEF提供了一个示例项目,使CEF开发变得非常简单。 只需浏览cef项目网站,并按照分步说明进行操作。 本教程链接的源文件适用于当前的CEF3主分支,可能与cef-project下载的版本略有不同。

 

3.加载自定义URL

cefsimple应用程序默认加载google.com,但您可以更改它以加载自定义URL。加载其他URL的最简单的方法是通过命令行。

# Load the local file “c:\example\example.html”
cefsimple.exe --url=file://c:/example/example.html

您还可以编辑cefsimple/simple_app.cc中的源代码,并重新编译应用程序以默认加载自定义URL。

// Load the local file “c:\example\example.html”…if (url.empty())
  url = "file://c:/example/example.html";…

 

4.应用组成

所有CEF应用程序具有以下主要组件:

1.CEF动态库(Windows上的libcef.dll,Linux上的libcef.so,OS X上的“Chromium Embedded Framework.framework”)

2.支持文件(*.pak和*.bin二进制blob等)。

3.资源(html/js/css内置的功能,字符串等)。

4.客户端可执行文件(本例中为cefsimple)。

每个基于CEF的应用程序,CEF动态库,支持文件和资源将是相同的。它们被包含在二进制分发的Debug/Release或Resources目录中。请参阅二进制包中包含的README.txt文件,以获取详细信息,哪些文件是必需的,哪些文件可以安全略去。有关每个平台上所需应用程序布局的详细说明,请参见下文。

   

5.60秒概述结构

以下列表概述了本教程最重要的部分:

1.CEF使用多个进程。主应用程序为“browser”进程。 将为渲染器,插件,GPU等创建子进程。

2.在Windows和Linux上,相同的可执行文件可用于主进程和子进程。 在OS X上,您需要为子进程创建单独的可执行文件和应用程序包。

3.CEF中的大多数进程都有多个线程。 CEF提供了在各种线程之间Post任务的功能和接口。

4.一些回调和函数只能在特定进程或特定线程中使用。 在您首次开始使用新的回调或函数之前,请确保在API标头中阅读源代码注释。

以上几点的完整解释可阅读GeneralUsage Wiki页面。

  

6.源代码

cefsimple应用程序初始化CEF并创建一个弹出浏览器窗口。 所有浏览器窗口关闭后,应用程序将终止。程序流程如下:

1.操作系统执行浏览器进程入口函数(main或wWinMain)。

2.入口函数:

    2.1.创建一个处理进程级回调的SimpleApp实例。

    2.2.初始化CEF并运行CEF消息循环。

3.初始化后,CEF调用SimpleApp::OnContextInitialized(),此函数:

    3.1.创建SimpleHandler的单例实例。

    3.2.使用CefBrowserHost::CreateBrowser()创建浏览器窗口。

4.所有浏览器共享SimpleHandler实例,该实例负责自定义浏览器行为和处理浏览器相关的回调(使用寿命,加载状态,标题显示等)。

5.当浏览器窗口关闭时SimpleHandler::OnBeforeClose()被调用。 当所有浏览器窗口关闭时,OnBeforeClose实现退出CEF消息循环以退出应用程序。

您的二进制发行版可能包含以下文件的较新版本。然而,一般概念保持不变。

 

7.入口函数

执行从浏览器进程入口点开始。此函数负责初始化CEF和任何与OS相关的对象。例如它在Linux上安装X11错误处理程序,并在OS X上分配必要的Cocoa对象。OS X对辅助进程有一个单独的入口点函数。

Windows平台实现:cefsimple/cefsimple_win.cc

Linux平台实现: cefsimple/cefsimple_linux.cc

Mac OS X平台实现

    对于浏览器进程:cefsimple/cefsimple_mac.mm

    对于子进程:cefsimple/process_helper_mac.cc

  

8.SimpleApp

SimpleApp负责处理进程级回调。它暴露了一些由多个进程共享的接口/方法,部分仅在特定进程中调用。例如,CefBrowserProcessHandler接口仅在浏览器进程中调用。还有一个单独的CefRenderProcessHandler接口(在此示例中未使用),仅在渲染进程中调用。注意GetBrowserProcessHandler()必须返回|this| 因为SimpleApp实现了CefApp和CefBrowserProcessHandler。有关CefApp和相关接口的更多信息,请参阅GeneralUsage Wiki页面或API头文件。

  共享实现:cefsimple/simple_app.h, cefsimple/simple_app.cc

    

9.SimpleHandler

SimpleHandler负责处理浏览器级回调。 这些回调在浏览器进程中执行。在本例中,我们对所有浏览器使用相同的CefClient实例,但是您的应用程序可以根据需要使用不同的CefClient实例。有关CefClient和相关接口的其他信息,请参阅GeneralUsage Wiki页面或API头文件。

共享实现:cefsimple/simple_handler.h,cefsimple/simple_handler.cc

Windows平台实现:cefsimple/simple_handler_win.cc

Linux平台实现:cefsimple/simple_handler_linux.cc

Mac OS X平台实现:cefsimple/simple_handler_mac.mm

  

10.编译步骤

构建步骤因平台而异。浏览二进制发行版附带的CMake文件,以完整了解所有必需的步骤。所有平台通用的构建步骤通常可以总结如下:

1.编译libcef_dll_wrapper静态库。

2.编译应用源代码文件。 链接到libcef动态库和libcef_dll_wrapper静态库。

3.将库和资源复制到输出目录。

  

11.Windows编译步骤

1.编译libcef_dll_wrapper静态库。

2.编译/链接cefsimple.exe。

    所需的源代码文件包括:cefsimple_win.cc,simple_app.cc,simple_handler.cc,simple_handler_win.cc。

    必需的链接库包括:comctl32.lib,shlwapi.lib,rcprt4.lib,libcef_dll_wrapper.lib,libcef.lib,cef_sandbox.lib。请注意,cef_sandbox.lib(沙箱支持所需)是目前使用Visual Studio 2015 Update 3构建的静态库,它可能无法与其他Visual Studio版本一起编译。有关如何禁用沙箱支持,请参阅cefsimple_win.cc中的注释。

    资源文件是cefsimple.rc。

    清单文件是cefsimple.exe.manifest和compatibility.manifest。

结果目录结构如下所示为2526分支:

Application/
    cefsimple.exe  <= cefsimple application executable
    libcef.dll <= main CEF library
    icudtl.dat <= unicode support data
    libEGL.dll, libGLESv2.dll, ... <= accelerated compositing support libraries
    cef.pak, devtools_resources.pak, ... <= non-localized resources and strings
    natives_blob.bin, snapshot_blob.bin <= V8 initial snapshot
    locales/
        en-US.pak, ... <= locale-specific resources and strings

文章作者:hgy413
本文地址:https://hgy413.com/4385.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

本文目前尚无任何评论.

发表评论