原文   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. 关于Idea启动配置tomcat

    1.打开file中setting中搜索Application Servers,如下图 2.添加服务器类型,例如tomcat,如下图,添加完成之后可以选定tomcat的目录,tomcat Home配置t ...

  2. 剑指Offer 15. 反转链表 (链表)

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 题目地址 https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca? ...

  3. 如何在 Windows 中设置 /3GB 启动开关

    备注: 只有在下列操作系统中才支持 /3GB 开关: Windows 2000 Advanced Server Windows 2000 Datacenter Server Windows Serve ...

  4. Spring Cloud 请求重试机制核心代码分析

    场景 发布微服务的操作一般都是打完新代码的包,kill掉在跑的应用,替换新的包,启动. spring cloud 中使用eureka为注册中心,它是允许服务列表数据的延迟性的,就是说即使应用已经不在服 ...

  5. alias重命名命令

    升级了openssh后,发现ctrl+l忽然无法清屏了. 如果需要清屏的话,就得执行clear,但我更喜欢简单粗暴的做法,于是想起alias命令 方式一: 如果只想在当前终端生效(exit该窗口终端后 ...

  6. zombodb 数据类型映射

    zombodb 与es 数据类型的映射处理 通用数据类型映射 Postgres 类型 Elasticsearch JSON 映射定义 bytea {"type": "bi ...

  7. JAVA AES CBC 加密 解密

    AES 256 , KEY 的长度为 32字节(32*8=256bit). AES 128 , KEY 的长度为 16字节(16*8=128bit) CBC 模式需要IV, IV的值是固定写死,还是当 ...

  8. git与github区别与简介

    From: https://blog.csdn.net/skyxmstar/article/details/65631658 git和github是两个完全不同的概念. git 是一个版本管理工具,是 ...

  9. 树莓派apt-get The value '\stable' is invalid for APT 错误

    对apt-get进行任何操作都会报错: pi@raspberrypi:~ $ sudo apt-get upgrade Reading package lists... Done E: The val ...

  10. android 获取对权限的选择

    一般是第三方软件拦截,再次提示给用户,确认权限的,如360等.(PS 没有设置权限的app 是会崩溃的  ,而是不是弹出权限确认,因为你都没设置这个权限)看了网上很多,确切说没有一个适合我的. 其实用 ...