介绍

cef 是一个基于google chromiun的简单的框架。 它主要是作为一个内嵌浏览器嵌入到客户端应用程序中。

可以再 http://cefbuilds.com 下载最新的编译版本。

总体框架预览

  1. CEF 使用了多进程。主进程是“browser”进程。 而子进程是由rederes, plugins, GPU, 等组件创建。
  2. 在ECF的所有进程中,都可以有多线程。CEF提供了函数和接口在不同的线程中来传递任务。
  3. 一些回调方法和函数只能在特定线程和进程中使用。在使用API之前请确保仔细阅读注释。

源代码

cefsimple 工程初始化CEF并创建了一个简单的浏览器窗口。

  1. 系统在入口点函数中(man或者wWinMain)函数中开启browser进程
  2. 入口点函数:
    1. 创建SimpleApp的实例,在这个类中保存process-level callbacks.
    2. 初始化CEF并开启消息循环。
  3. 当CEF初始化完毕以后, SimpleApp::OnContextInitialized()会被调用。在这个方法中:
    1. 创建一个单例的SimpleHandler
    2. 由CefBrowserHost::CreateBrowserSync()创建一个浏览器窗口
  4. 所有的浏览器共享同一个在SimpleHandler。SimpleHandler负责定制浏览器的行为并保存browser-related callbacks(loading状态,标题行为等)
  5. 当浏览器窗口被关闭的时候, 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 介绍的更多相关文章

  1. qt添加cef库嵌入web [转]

    qt cef嵌入web 原文http://blog.sina.com.cn/s/blog_9e59cf590102vnfc.html 最近项目需要,研究了下libcef库. Cef(Chromium ...

  2. 使用C#在CEF中拦截并响应请求

    一.前言 忙里偷闲,研究了一下如何在CEF中拦截请求,并作出响应.这个功能对某些需要修改服务器响应的需求来说必不可少,可以直接读取本地文件作为响应内容. C#的CEF封装项目有很多,我使用的是Chro ...

  3. 初识CEF

    介绍 CEF全称Chromium Embedded Framework,是一个基于Google Chromium 的开源项目.Google Chromium项目主要是为Google Chrome应用开 ...

  4. 利用 Chromium Embedded Framework (CEF) 定制提取 Flash 视频的浏览器

    功能介绍: 利用 CEF 分析网页源码, 提取 flash 视频的代码. 提取的视频代码 LoadString 和 JS 两种方式重新插入到浏览器. (CEF_3.2171.1979_win32 - ...

  5. CEF中文教程(google chrome浏览器控件) -- Windows下编译Chromium

    CEF中文教程(google chrome浏览器控件) -- CEF简介 2013-04-10 16:48 42928人阅读 评论(4) 收藏 举报  分类: CEF(2)    目录(?)[+]   ...

  6. 刨根究底字符编码之十——Unicode字符集的字符编码方式CEF

    Unicode字符集的字符编码方式CEF 一.字符编码方式CEF的选择 1. 由于Unicode字符集非常大,有些字符的编号(码点值)需要两个或两个以上字节来表示,而要对这样的编号进行编码,也必须使用 ...

  7. Qt中使用CEF(Windows下)

    最近项目中要在Qt中使用CEF(Chromium Embedded Framework),在这里总结下其中的几个要点. 下载合适的CEF版本 关于CEF的简介我们这里就不做介绍了,下载CEF可以有2种 ...

  8. CEF小白人系列1-认识CEF

    手头上有个项目需要做浏览器的相关功能,评估了几个嵌入式方案最后选定CEF作为开发基础. 在入坑新技术的时候第一选择是去官网学习,这是一个非常好的习惯. CEF官网(请科学上网) https://bit ...

  9. 常见爬虫/BOT对抗技术介绍(一)

    爬虫,是大家获取互联网公开数据的有效手段.爬虫.反爬虫技术.反-反爬虫技术随着互联网的不断发展,也在不断发展更新, 本文简要介绍现代的爬虫/BOT对抗技术,如有疏漏,多谢指正! 一.反爬虫/BOT技术 ...

随机推荐

  1. 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  ...

  2. Http状态码笔记

    1,503 服务器不可用. HTTP Error 503错误的解释:web服务器不能处理HTTP请求,可能是临时超载或者是服务器进行维护.这意味着你需要忍耐一下,等待服务器的临时处理.在这种状态下,一 ...

  3. php正则获取html图片标签信息(采集图片)

    php获取html图片标签信息(采集图片),实现图片采集及其他功能,带代码如下: <?php $str="<img src='./a.jpg'/>111111<img ...

  4. HTML 5 视频(video)

    video 元素支持三种视频格式 IE Firefox Opera Chrome Safari 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件 No 3.5+ 10.5+ 5. ...

  5. PHP连接数据库的方法

    mysql可通过两种方式通过PHP和web相连,一种通过php的mysql相关函数,另一种通过php的ODBC相关函数. 相关函数如下: MYSQL函数 mysql_affected_rows: 得到 ...

  6. 使用数据泵+dblink迁移数据库,适用于本地空间不足的情况

    col name for a40 select name,locks,pins from v$db_object_cache where locks > 0 and pins > 0 an ...

  7. SDK Manager.exe闪退

    运行tools文件下android.bat. 修改tools文件下android.bat文件,再运行SDK Manager.exe

  8. infinitynewtab 背景api

    http://img.infinitynewtab.com/wallpaper/527.jpg 图片   1-4050

  9. mongodb操作命令

    连接mongodb:(mongo命令打开的是一个javascript shell.所以js语法在这里面都行得通)mongo 192.168.18.xx:27088/ups -uusername -pp ...

  10. C++ 用RGB 三种颜色绘图

    #include <iostream> #include <cmath> #include <cstdlib> #define DIM 1024 #define D ...