天天看点

Chromium Embedded Framework中文文档之(基本使用)

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

在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命令

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

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

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.

CefStreamReader, CefStreamWriter, CefReadHandler 和 CefWriteHandler 读写数据的简单的接口.

CefV8Handler 和 CefV8Value 用于创建和访问Javascript对象.

继续阅读