请注明出处:
http://blog.csdn.net/wangshubo1989
现在还是在win32项目的基础上,对libcef进行简单的剖析。注意是针对WinMain函数中libcef的类以及方法的介绍。
首先上一段代码:
#include <windows.h>
#include "cefsimple/simple_app.h"
// Entry point function for all processes.
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow) {
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// Enable High-DPI support on Windows 7 or newer.
CefEnableHighDPISupport();
void* sandbox_info = NULL;
// Provide CEF with command-line arguments.
CefMainArgs main_args(hInstance);
// SimpleApp implements application-level callbacks. It will create the first
// browser instance in OnContextInitialized() after CEF has initialized.
CefRefPtr<SimpleApp> app(new SimpleApp);
// Specify CEF global settings here.
CefSettings settings;
settings.no_sandbox = true;
// Initialize CEF.
CefInitialize(main_args, settings, app.get(), sandbox_info);
// Run the CEF message loop. This will block until CefQuitMessageLoop() is
// called.
CefRunMessageLoop();
// Shut down CEF.
CefShutdown();
return 0;
}
下面就对上面代码中的内容进行简要介绍。
一、UNREFERENCED_PARAMETER的作用
作用:告诉编译器,已经使用了该变量,不必检测警告!
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
二、 高清适配函数CefEnableHighDPISupport()
可以参考链接:http://www.ubergizmo.com/how-to/how-to-google-chrome-hidpi-support-windows/
// Enable High-DPI support on Windows 7 or newer.
CefEnableHighDPISupport();
三、CefMainArgs和CefExecuteProcess函数(判断子线程)
提供一个命令行的方式,暂时不知道咋回事呢!
// Provide CEF with command-line arguments.
CefMainArgs main_args(hInstance);
在CEF3和Chromium中许多特性可以使用命令行参数进行配置。这些参数采用”–some-argument[=optional-param]”形式,并通过CefExecuteProcess()和CefMainArgs结构(参考下面的”应用资源布局”章节)传递给CEF。在传递CefSettings结构给CefInitialize()之前,我们可以设置CefSettings.command_line_args_disabled为false来禁用对命令行参数的处理。如果想指定命令行参数传入主应用程序,实现CefApp::OnBeforeCommandLineProcessing()方法。
四、CefRefPtr
创建SimpleApp的实例,在这个类中保存process-level callbacks.
初始化CEF并开启消息循环。
CefRefPtr<SimpleApp> app(new SimpleApp);
五 、定制你的CEF(CefWindowInfo和settings)
5.1.全局设置
// Specify CEF global settings here.
CefSettings settings;
settings.no_sandbox = true;
5.2.本地windows信息
// Information used when creating the native window.
CefWindowInfo window_info;
window_info.SetAsPopup(NULL, L"百度");
//无透明值
window_info.SetTransparentPainting(FALSE);
5.3.浏览器设置
// Specify CEF browser settings here.
CefBrowserSettings browser_settings;
可以在这里配置的参数有很多
比如:
DefaultEncoding(用于所有网页内容的编码方式,默认为ISO-8859-1)
UserStyleSheetLocation(用于所有网页的样式,应该按照这样的格式设置这个字段:data:text/css;charset=utf-8;base64,[csscontent])
RemoteFonts(用于所有网页的字体)
JavaScript(用于所有网页是否可以执行JS脚本)
JavaScriptOpenWindows(用于所有网页是否可以通过JS来打开窗口)
六 、初始化CEF
// Initialize CEF.
CefInitialize(main_args, settings, app.get(), sandbox_info);
当CEF初始化完毕以后, SimpleApp::OnContextInitialized()会被调用。在这个方法中:
创建一个单例的SimpleHandler
由CefBrowserHost::CreateBrowserSync()创建一个浏览器窗口
所有的浏览器共享同一个在SimpleHandler。SimpleHandler负责定制浏览器的行为并保存browser-related callbacks(loading状态,标题行为等)
当浏览器窗口被关闭的时候, SimpleHandler::OnBeforeClose() 被调用。当所有浏览器窗口被关闭,CEF消息循环退出。
七 、消息循环
// Run the CEF message loop. This will block until CefQuitMessageLoop() is
// called.
CefRunMessageLoop();
八 、关闭CEF
// Shut down CEF.
CefShutdown();
九 、创建浏览器窗口
CreateBrowser是一个静态函数
// Create the first browser window.
CefBrowserHost::CreateBrowser(window_info, handler.get(), "http:\\www.vagaa.com",
browser_settings, NULL);
================================================================
应用程序通过调用CefBrowser和CefFrame的方法来处理浏览器控件事件:
Back, Forward, Reload and Stop Load。控件浏览器的导航
Undo, Redo, Cut, Copy, Paste, Delete, Select All.控件目标框架的选取
Print。打印目标框架
Get Source。以字符串的形式来获取目标框架的HTML源码
View Source. 用缓存文件来保存目的框架的HTML源码,并且用系统默认的文本查看器打开
Load URL.加载特定的URL到目标框架
Load String. 加载一个特定的字符串到目标框架,通过一个随意指定的虚拟URL
Load Stream. 加载一个特定的二进制文件到目标框架,通过一个随意指定的虚拟URL
Load Request, 加载一个特定的请求到目标框架
Execute JavaScript: 在目标框架里面执行一个特定的Javscript命令
Zoom。 缩放特定框架的网页内容
框架接口:
CefBrowser是主要的浏览器窗口类,可以用静态的函数CreateBrowser() 和CreateBrowserSync() 来创建一个新的浏览器窗口。
CefFrame 代表一个浏览器窗口的框架,每个浏览器窗口有一个顶层的主框架,而这个主框架可以用GetMainFrame() 方法得到。
CefClient是主浏览器窗口的代表接口,这个接口做为参数传递给CreateBrowser()
CefRequest 代表URL,方法,发送数据和头文件等这样的请求。
CefSchemeHandleFactory 类是被用来处理像myscheme://mydomain类似客户计划的请求
CefReadHandler和CefWriteHandle是一个读写数据的简单接口。
CefV8Handler,CefV8Value和CefV8Context是被用来创建和访问JavaScript对象。
一起学libcef--libcef的基本类和方法介绍(如何产生一个你自己的浏览器)
原文:http://blog.csdn.net/wangshubo1989/article/details/50189577