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

一般用法

使用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对象.
时间: 2024-08-27 07:02:39

Chromium Embedded Framework中文文档之(基本使用)的相关文章

框架-为什么Chromium Embedded Framework中运行js会很卡?

问题描述 为什么Chromium Embedded Framework中运行js会很卡? 为什么Chromium Embedded Framework中运行js会很卡? 比如说在CEF中输入webQQ的网址打开webQQ,在里面操作.拖拽会很卡,但在浏览器里是很流畅的,不知道CEF内嵌了谷歌浏览器,为什么运行js会很卡?? 解决方案 Chrome的稳定版本,一般是在经过Chromium测试,经过大量用户反馈,比较稳定的功能才会加入到Chrome当中来,因此一般Chrome都会更新比较慢,版本号也

ios-安卓和IOS有没有中文文档呢,我英文不好?

问题描述 安卓和IOS有没有中文文档呢,我英文不好? 安卓和IOS有没有中文文档?我英文不太好,看不懂英文的,有没有全中文的,不经简单翻译的 解决方案 下个有道词典,直接屏幕取词,没人能每个单词都会,主要要耐心看 解决方案二: 哈皮还是看英文的吧,看看就明白了 解决方案三: 看的多了就明白了,英语差不多的话,就能发现不会的就那么几个关键的词 解决方案四: 这个必须自己适应吧,毕竟各大技术网站还是英文的居多,API也是英文的,一点点积累吧 解决方案五: 一开始都会有这样的烦恼,那么多英文想想都头疼

如何使英文Windows8系统正常显示中文文档

  1.在超级链接中点击搜索"Control panel"/Metro界面直接输入"Control Panel"/Computer中直接点击"Control Panel"进入控制面板.如下图所示: 文档-中文文档管理系统"> 2.选择"Clock,Language and Region"(区域和语言).如下图所示: 3.选择"Region"(区域).如下图所示: 4.在弹出的对话窗口中切换至

如何使英文Windows7系统正常显示中文文档

  由于在外企公司统一使用的是英文版的Windows 7,所以在打开一些中文的文档时却显示乱码,而且运行有些中文版的软件也是如此,难道只能使用中文版的Windows 7? 并非如此.出现这种问题是因为你打开的中文文档并不是以"Unicode"保存的. "Unicode"也称统一码或万国码,有些中文版软件,也是不支持Unicode的,所以才会出现乱码. 可以对Windows 7系统进行设置来轻松地解决这种问题, 1.依次打开"control panel→Cl

求救。。。-谁有jdk1.8的中文文档,求共享

问题描述 谁有jdk1.8的中文文档,求共享 谁有jdk1.8的中文文档,求共享,感激不尽-............................. 解决方案 http://download.csdn.net/detail/sinat_16148407/7478295

求JBPM4 API中文文档

问题描述 要中文文档哦要中文文档哦要中文文档哦要中文文档哦要中文文档哦 解决方案

满江红开放技术研究组织发布Seam 2.0中文文档正式版

满江红开放技术研究组织发布Seam 2.0中文文档正式版 三个月前,满江红开放技术研究组织发布了RC版,详见: http://yulimin.javaeye.com/blog/151917 现在满江红开放技术研究组织正式发布Seam 2.0中文文档正式版,希望对大家有所帮助,谢谢. 同时,再次感谢王琳.马越.晓钢在发布RC版后,对全部译文进行通读,发现并纠正其中的问题. 虽然我们正式宣布正式版发布,但是也希望广大朋友能够在阅读的过程若发现有疑问的地方,及时提出来进行讨论并加以修正,共同提高文档的

触摸设备日期选择插件 Mobiscroll 发布中文文档

Mobiscroll 是一个用于触摸设备(Android phones, iPhone, iPad, Galaxy Tab)的日期和时间选择器jQuery插件.可以让用户很方便的只需要滑动数字既可以选择日期.Mobiscroll作为一款jQuery日期插件可以让用户自定义主题,完全通过CSS文件修改样式,经过测试可以完美使用在iOS4,Android 2.2, Android 2.3的浏览器,Safari浏览器,火狐,IE9等浏览器上面. 中文文档已经启动 本文来自开源中国社区 [http://

Android2.2 API 中文文档系列(6) —— ImageView

注意 请查看本文后期更新完整版: http://www.cnblogs.com/over140/archive/2011/06/08/2075054.html   声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://www.cnblogs.com/over140/    正文 一.结构 java.lang.Object android.view.View android.widget.ImageView   已知直接子类: