CEF3介绍:
CEF全称Chromium Embedded Framework,是一个基于Google Chromium 的开源项目。Google Chromium项目主要是为Google Chrome应用开发的,而CEF的目标则是为第三方应用提供可嵌入浏览器支持。CEF隔离底层Chromium和Blink的复杂代码,并提供一套产品级稳定的API,发布跟踪具体Chromium版本的分支,以及二进制包。CEF的大部分特性都提供了丰富的默认实现,让使用者做尽量少的定制即可满足需求。在本文发布的时候,世界上已经有很多公司和机构采用CEF,CEF的安装量超过了100万。[CEF wikipedia]页面上有使用CEF的公司和机构的不完全的列表。CEF的典型应用场景包括:
- 嵌入一个兼容HTML5的浏览器控件到一个已经存在的本地应用。
- 创建一个轻量化的壳浏览器,用以托管主要用Web技术开发的应用。
- 有些应用有独立的绘制框架,使用CEF对Web内容做离线渲染。
- 使用CEF做自动化Web测试。
CEF3是基于Chomuim Content API多进程构架的下一代CEF,拥有下列优势:
- 改进的性能和稳定性(JavaScript和插件在一个独立的进程内执行)。
- 支持Retina显示器。
- 支持WebGL和3D CSS的GPU加速。
- 类似WebRTC和语音输入这样的前卫特性。
- 通过DevTools远程调试协议以及ChromeDriver2提供更好的自动化UI测试。
- 更快获得当前以及未来的Web特性和标准的能力。
(摘取自https://github.com/fanfeilong/cefutil/blob/master/doc/CEF%20General%20Usage-zh-cn.md#request-interception ps:cef3官网的翻译文档)
CEF3 版本介绍:
cef_binary_3.2171.1972_windows32:VS2005-2010可直接编译版本,也不存在3.2171.1901的外边框问题,但是输入法点位有问题。(下载链接)
cef_binary_3.2623.1401_windows32,cef3最后一个支持XP系统的版本。(下载链接:cef3.2623.1395编译后文件)
其他编译版本支持MP3等可加群:231250586
CEF3 使用介绍:
CEF3的各个类的介绍我这就不写了,其他博客已经介绍的非常详细了,我这就直接开始说使用过程。先贴两个类:
simple_handler.h
#ifndef CEF_TESTS_CEFSIMPLE_SIMPLE_HANDLER_H_
#define CEF_TESTS_CEFSIMPLE_SIMPLE_HANDLER_H_
#include "include/cef_client.h"
#include "include/cef_base.h"
#include "include/cef_browser.h"
#include "include\base\cef_lock.h"
#include "include/cef_web_plugin.h"
#include "cef_cookie.h"
#include <list>
class SimpleHandler : public CefClient,
public CefDisplayHandler,
public CefDownloadHandler,
public CefLifeSpanHandler,
public CefLoadHandler,
public CefContextMenuHandler,
public CefCookieVisitor,
public CefWebPluginInfoVisitor
{
public:
SimpleHandler();
~SimpleHandler();
// Provide access to the single global instance of this object.
static SimpleHandler* GetInstance();
// CefClient methods:
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() OVERRIDE {
return this;
}
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE {
return this;
}
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() OVERRIDE {
return this;
}
virtual CefRefPtr<CefContextMenuHandler>GetContextMenuHandler() {
return this;
}
virtual CefRefPtr<CefDownloadHandler> GetDownloadHandler(){
return this;
}
// CefDisplayHandler methods:
virtual void OnTitleChange(CefRefPtr<CefBrowser> browser,
const CefString& title) OVERRIDE;
// CefLifeSpanHandler methods:
/*在创建新的浏览器之后调用;*/
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE;
/*当浏览器收到请求关闭时调用;*/
virtual bool DoClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
/*浏览器销毁之前调用;*/
virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
/*在创建新的弹出式浏览器IO线程之前调用;*/
/*本程序主要阻止弹出,在本浏览器中打开;*/
virtual bool OnBeforePopup(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
const CefString& target_url,
const CefString& target_frame_name,
WindowOpenDisposition target_disposition,
bool user_gesture,
const CefPopupFeatures& popupFeatures,
CefWindowInfo& windowInfo,
CefRefPtr<CefClient>& client,
CefBrowserSettings& settings,
bool* no_javascript_access) OVERRIDE;
// CefLoadHandler methods:
/*浏览器加载错误时调用;*/
virtual v