原文   http://blog.csdn.net/xtfnpgy/article/details/46635225
 

官方下载地址:https://cefbuilds.com/

CEF简介:

嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件。CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去。

它的设计思想政治就是易用且兼顾性能。CEF基本的框架包含C/C++程序接口,通过本地库的接口来实现,而这个库则会隔离宿主程序和Chromium&Webkit的操作细节。它在浏览器控件和宿主程序之间提供紧密的整合,它支持用户插件,协议,javascript对象以及javascript扩展,宿主程序可以随意地控件资源下载,导航,下下文内容和打印等,并且可以跟Google Chrome浏览器一起,支持高性能和Html5 技术,

这段代码你可以在[test]文件夹下面的cefclient工程里面看到。

文件结构:

include -- 这个文件夹里面放CEF客户应用程序所需的头文件

libcef -- 此文件夹存放CEF的静态库

libcef_dll -- 此文件夹CEF的动态拉链库

tests -- 此文件夹存放测试的例子

cefclient -- 一个简单的客户程序

unittests --  CEF界面单元测试

浏览器事件:

 
   应用程序通过调用CefBrowser和CefFrame的方法来处理浏览器控件事件:
       a.Back, Forward, Reload and Stop Load。控件浏览器的导航
       b.Undo, Redo, Cut, Copy, Paste, Delete, Select All.控件目标框架的选取
       c.Print。打印目标框架
       d.Get Source。以字符串的形式来获取目标框架的HTML源码
       e.View Source. 用缓存文件来保存目的框架的HTML源码,并且用系统默认的文本查看器打开
       f.Load URL.加载特定的URL到目标框架
       g.Load String. 加载一个特定的字符串到目标框架,通过一个随意指定的虚拟URL
       h.Load Stream. 加载一个特定的二进制文件到目标框架,通过一个随意指定的虚拟URL
       i.Load Request, 加载一个特定的请求到目标框架
       j.Execute JavaScript: 在目标框架里面执行一个特定的Javscript命令
       k. Zoom。 缩放特定框架的网页内容
 

插入网景风格插件:

      CEF支持插入网景风格的插件,插入插件的动作跟正常插入基本动态链接库的插件一样,但是做为一个单独的Dll,必须通过容器来创建,并且要用CefRegisterPlugin()这个函数来注册到系统里面去。你要调用这个函数的话,你就得包含cef_nplugin.h这个头文件。
 

JavaScript扩展:

    CEF支持能连接本地程序源代码的Javascript扩展,演示程序你可以去看cef_v8.h进而的CefRegisterExtension()方法,还有CEFClient下面的演示例子,你如果想得到更多的信息,可以点下面的链接:   JavaScriptIntegration
 

用户计划:

    CEF支持注册和处理像myscheme://mydomain一样的用户计划,你可去查看cef_scheme.h里面的CefRegisterScheme()和Scheme Handler测试单元,得到详细的说明。
 
 

框架总览:

   所有的文件前缀都是Cef
 
 

框架的建立和销毁:

   CEF的UI消息寄宿在一个框架建立的单线程中,用户只负责用 CefInitialize()和CefShutdown()来建立和销毁这个线程,但是你如果设置了CefSettings.multi_threaded_message_loop, 这个UI消息循环也可以运行在一个单独的线程里面。
 
 

引用计数:

   所有的框架数都从CefBase这个基类继承而来,并且所有的实例指针都用CefRefPtr智能指针来管理,可以用AddRef()和Release()函数来自动处理引用计数。
 

平台无关:

   CEF框架被设计成平台无关的,现在它支持Windows,Mac os-x和Linux,为了无缝地支持多种平台,框架定义了一系列的平台无关的接口和类型定义。
 
 

框架接口:

      CefBrowser是主要的浏览器窗口类,可以用静态的函数CreateBrowser() 和CreateBrowserSync() 来创建一个新的浏览器窗口。
      CefFrame 代表一个浏览器窗口的框架,每个浏览器窗口有一个顶层的主框架,而这个主框架可以用GetMainFrame() 方法得到。
      CefClient是主浏览器窗口的代表接口,这个接口做为参数传递给CreateBrowser()
      CefRequest 代表URL,方法,发送数据和头文件等这样的请求。
      CefSchemeHandleFactory 类是被用来处理像myscheme://mydomain类似客户计划的请求

CefReadHandler和CefWriteHandle是一个读写数据的简单接口。

      CefV8Handler,CefV8Value和CefV8Context是被用来创建和访问JavaScript对象。
 
Cef3下载下来的文件结构:
 
bin目录是主要存放DLL,你需要把bin目录下所有的文件,复制到你的Exe的当前文件夹,否则就会报错!code 126
 
demo 为例子
packages为压缩包
src主要源代码部分,需要在delphi的library添加这个src的路径
 
安装完成之后,新建一个Demo1,拖一个chromium控件出来并命名为chrm1,并把bin目录下所有文件,复制到你的程序的当前文件夹;
再拖一个button,双击加入代码: 
 chrm1.Browser.MainFrame.LoadUrl('about:blank'); //第一次必须先加载空白页,才能浏览其他网页 
 chrm1.Browser.MainFrame.LoadUrl('你要浏览的网址');
 
至此第一个例子完成!

Delphi中Chrome Chromium、Cef3学习笔记(一)的更多相关文章

  1. Delphi中Chrome Chromium、Cef3学习笔记(四)

    原文   http://blog.csdn.net/xtfnpgy/article/details/48155323   一.遍历网页元素并点击JS: 下面代码为找到淘宝宝贝页面,成交记录元素的代码: ...

  2. Delphi中Chrome Chromium、Cef3学习笔记(三)

    原文   http://blog.csdn.net/xtfnpgy/article/details/46635871   Delphi与JS的交互问题: 一.执行简单的JS 上一篇已经讲过: chrm ...

  3. Delphi中Chrome Chromium、Cef3学习笔记(二)

    原文   http://blog.csdn.net/xtfnpgy/article/details/46635739   用Tchromium替换webbrowser 用惯了EmbeddedWB,不想 ...

  4. Delphi中Chrome Chromium、Cef3学习笔记(六)

    原文   http://blog.csdn.net/xtfnpgy/article/details/71703317   一.CEF加载网页时空白 chrm1.Load(‘你的网址’); 出现空白,跟 ...

  5. Delphi中Chrome Chromium、Cef3学习笔记(五)

    原文   http://blog.csdn.net/xtfnpgy/article/details/48489489   一.模拟移动鼠标 //  SetCursorPos(StrToInt(Edit ...

  6. Chrome development tools学习笔记(5)

    调试JavaScript 随着如今JavaScript应用的越来越广泛,在面对前端工作的时候,开发人员须要强大的调试工具来高速有效地解决这个问题.我们文章的主角,Chrome DevTools就提供了 ...

  7. Chrome development tools学习笔记(3)

    (上次DOM的部分做了些补充,欢迎查看Chrome development tools学习笔记(2)) 利用DevTools Elements工具来调试页面样式 CSS(Cascading Style ...

  8. JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

  9. JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

    前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和A ...

随机推荐

  1. instanceof & isAssignableFrom的异同

    instance 关注的是实例是否为类或接口的一个实例 isAssignableFrom 关注的是Class对象是否相同,或者Class1是Class2的超类或接口 Class1.isAssignab ...

  2. MySQL:数据查询

    数据查询 一.基本查询语句 1.语法:写一行 select{*<字段列表>}//查询的字段,多个字段用逗号分开 from<表1>,<表2>…//数据表名 {//可选 ...

  3. keil的可烧写hex文件生成

    右键Target1 Options Target for ‘Target1’ ...->Output->Create Executable:->Create HEX File Bui ...

  4. Linux:ldd命令详解

    ldd 用于打印程序或者库文件所依赖的共享库列表. 语法 ldd(选项)(参数) 选项 --version:打印指令版本号: -v:详细信息模式,打印所有相关信息: -u:打印未使用的直接依赖: -d ...

  5. 问题 Duplicate entry '0' for key 'PRIMARY'

    今天使用了触发器,在一个表中执行增删改操作,然后在另一个表中执行相应的记录时,出现了这个问题 其实这个问题应该算是细节问题,有两种情况: 1.就是在插入数据的时候将id设置为not nul但是在插入数 ...

  6. 牛客网PAT乙级(Basic Level)真题-数素数 (20)

    题目描述 令Pi表示第i个素数.现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数. 输入描述: 输入在一行中给出M和N,其间以空格分隔. 输出描述: 输出从PM到 ...

  7. java.io.IOException: Could not delete path 'D:\mycode\reactnative\SecondTest\android\app\build\generated\source\r \release\android\support\v7

    问题解决 直观上看是没有删除某个文件,产生的IOException异常,实际上是因为上次编译导致的缓存没有清空导致的. 进入到android目录下运行下面代码清除上次打包时的缓存: ./gradlew ...

  8. s21day06 python笔记

    s21day06 python笔记 一.昨日内容回顾及补充 回顾 补充 列表独有功能 reverse:反转 v = [1,2,3,4,5] v.reverse() #[5,4,3,2,1] sort: ...

  9. 国内优秀MVC开源框架jfinal简介

    JFinal简介 JFinal 项目开发始于2011年初,作者詹波(James Zhan)曾任搜格信息技术有限公司Java架构师,北京信息管理科学研究所CTO,现任微格网际(北京)科技有限公司联合创始 ...

  10. 使用maven profile指定配置文件打包适用多环境

    新建maven项目,   在pom.xml中添加 profile节点信息如下: <profiles> <profile> <!-- 开发环境 --> <id& ...