cef 介绍
介绍
cef 是一个基于google chromiun的简单的框架。 它主要是作为一个内嵌浏览器嵌入到客户端应用程序中。
可以再 http://cefbuilds.com 下载最新的编译版本。
总体框架预览
- CEF 使用了多进程。主进程是“browser”进程。 而子进程是由rederes, plugins, GPU, 等组件创建。
- 在ECF的所有进程中,都可以有多线程。CEF提供了函数和接口在不同的线程中来传递任务。
- 一些回调方法和函数只能在特定线程和进程中使用。在使用API之前请确保仔细阅读注释。
源代码
cefsimple 工程初始化CEF并创建了一个简单的浏览器窗口。
- 系统在入口点函数中(man或者wWinMain)函数中开启browser进程
- 入口点函数:
- 创建SimpleApp的实例,在这个类中保存process-level callbacks.
- 初始化CEF并开启消息循环。
- 当CEF初始化完毕以后, SimpleApp::OnContextInitialized()会被调用。在这个方法中:
- 创建一个单例的SimpleHandler
- 由CefBrowserHost::CreateBrowserSync()创建一个浏览器窗口
- 所有的浏览器共享同一个在SimpleHandler。SimpleHandler负责定制浏览器的行为并保存browser-related callbacks(loading状态,标题行为等)
- 当浏览器窗口被关闭的时候, SimpleHandler::OnBeforeClose() 被调用。当所有浏览器窗口被关闭,CEF消息循环退出。
可以看下如下代码:
int APIENTRY wWinMain(HINSTANCE hInstance
, HINSTANCE hPrevInstance
, LPTSTR lpCmdLine
, int nCmdShow)
{
CefMainArgs args(hInstance);
CefRefPtr<MySimpleApp> app(new MySimpleApp);
int exitCode = CefExecuteProcess(args, app, NULL);
if(exitCode >= 0) return exitCode;
CefSettings settings;
CefInitialize(args, settings, app, NULL);
CefRunMessageLoop();
CefShutdown();
return 0;
}
此时进程开启,但是没有任何窗口, 如果我们需要建立窗口需要如下
CefWindowInfo winInfo;
winInfo.SetAsPopup(NULL, "myCefSimple");
CefBrowserSettings browser_settings;
CefRefPtr<CefClient> client(new MySimpleClient());
std::string url = "file:///D:/project/github/cptf/resource/binding.html";
CefBrowserHost::CreateBrowser(winInfo
, client.get()
, url
, browser_settings
, NULL);
这样就显示出来窗口了。
但是我们发现在关闭的时候进程没有关掉, 所以我们要做如下动作。
class MySimpleClient : public CefClient
, public CefLifeSpanHandler
void MySimpleClient::OnBeforeClose(CefRefPtr<CefBrowser> browser) {
CEF_REQUIRE_UI_THREAD();
CefQuitMessageLoop();
}
总结
App和Client是CEF中最重要的两个类。CefExecuteProcess 和 CefInitialize 是建立app的两个最重要方法。
而CreateBrowser 是创建浏览器窗口的最重要方法。
cef 介绍的更多相关文章
- qt添加cef库嵌入web [转]
qt cef嵌入web 原文http://blog.sina.com.cn/s/blog_9e59cf590102vnfc.html 最近项目需要,研究了下libcef库. Cef(Chromium ...
- 使用C#在CEF中拦截并响应请求
一.前言 忙里偷闲,研究了一下如何在CEF中拦截请求,并作出响应.这个功能对某些需要修改服务器响应的需求来说必不可少,可以直接读取本地文件作为响应内容. C#的CEF封装项目有很多,我使用的是Chro ...
- 初识CEF
介绍 CEF全称Chromium Embedded Framework,是一个基于Google Chromium 的开源项目.Google Chromium项目主要是为Google Chrome应用开 ...
- 利用 Chromium Embedded Framework (CEF) 定制提取 Flash 视频的浏览器
功能介绍: 利用 CEF 分析网页源码, 提取 flash 视频的代码. 提取的视频代码 LoadString 和 JS 两种方式重新插入到浏览器. (CEF_3.2171.1979_win32 - ...
- CEF中文教程(google chrome浏览器控件) -- Windows下编译Chromium
CEF中文教程(google chrome浏览器控件) -- CEF简介 2013-04-10 16:48 42928人阅读 评论(4) 收藏 举报 分类: CEF(2) 目录(?)[+] ...
- 刨根究底字符编码之十——Unicode字符集的字符编码方式CEF
Unicode字符集的字符编码方式CEF 一.字符编码方式CEF的选择 1. 由于Unicode字符集非常大,有些字符的编号(码点值)需要两个或两个以上字节来表示,而要对这样的编号进行编码,也必须使用 ...
- Qt中使用CEF(Windows下)
最近项目中要在Qt中使用CEF(Chromium Embedded Framework),在这里总结下其中的几个要点. 下载合适的CEF版本 关于CEF的简介我们这里就不做介绍了,下载CEF可以有2种 ...
- CEF小白人系列1-认识CEF
手头上有个项目需要做浏览器的相关功能,评估了几个嵌入式方案最后选定CEF作为开发基础. 在入坑新技术的时候第一选择是去官网学习,这是一个非常好的习惯. CEF官网(请科学上网) https://bit ...
- 常见爬虫/BOT对抗技术介绍(一)
爬虫,是大家获取互联网公开数据的有效手段.爬虫.反爬虫技术.反-反爬虫技术随着互联网的不断发展,也在不断发展更新, 本文简要介绍现代的爬虫/BOT对抗技术,如有疏漏,多谢指正! 一.反爬虫/BOT技术 ...
随机推荐
- ZeroMQ接口函数之 :zmq_poll - I/O多路技术
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_poll zmq_poll(3) ØMQ Manual - ØMQ/4.1.0 Name zmq_poll ...
- Http状态码笔记
1,503 服务器不可用. HTTP Error 503错误的解释:web服务器不能处理HTTP请求,可能是临时超载或者是服务器进行维护.这意味着你需要忍耐一下,等待服务器的临时处理.在这种状态下,一 ...
- php正则获取html图片标签信息(采集图片)
php获取html图片标签信息(采集图片),实现图片采集及其他功能,带代码如下: <?php $str="<img src='./a.jpg'/>111111<img ...
- HTML 5 视频(video)
video 元素支持三种视频格式 IE Firefox Opera Chrome Safari 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件 No 3.5+ 10.5+ 5. ...
- PHP连接数据库的方法
mysql可通过两种方式通过PHP和web相连,一种通过php的mysql相关函数,另一种通过php的ODBC相关函数. 相关函数如下: MYSQL函数 mysql_affected_rows: 得到 ...
- 使用数据泵+dblink迁移数据库,适用于本地空间不足的情况
col name for a40 select name,locks,pins from v$db_object_cache where locks > 0 and pins > 0 an ...
- SDK Manager.exe闪退
运行tools文件下android.bat. 修改tools文件下android.bat文件,再运行SDK Manager.exe
- infinitynewtab 背景api
http://img.infinitynewtab.com/wallpaper/527.jpg 图片 1-4050
- mongodb操作命令
连接mongodb:(mongo命令打开的是一个javascript shell.所以js语法在这里面都行得通)mongo 192.168.18.xx:27088/ups -uusername -pp ...
- C++ 用RGB 三种颜色绘图
#include <iostream> #include <cmath> #include <cstdlib> #define DIM 1024 #define D ...