原文   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. GPU知识了解

    前言 今天在使用阿里云的时候,无意间看到了有GPU服务器,于是对它做了一个大概的了解. 概念 GPU是Graphics Processing Unit的缩写,翻译成中文就是图形处理器.是一种专门在个人 ...

  2. 莫烦tensorflow(6)-tensorboard

    import tensorflow as tfimport numpy as np def add_layer(inputs,in_size,out_size,n_layer,activation_f ...

  3. SpringMVC + MyBatis分库分表方案

    mybatis作为流行的ORM框架,项目实际使用过程中可能会遇到分库分表的场景.mybatis在分表,甚至是同主机下的分库都可以说是完美支持的,只需要将表名或者库名作为动态参数组装sql就能够完成.但 ...

  4. $inject

    function breadcrumb($parse, store) { } // 为了压缩 breadcrumb.$inject = ['$parse', 'breadcrumbStore']

  5. 如何将docker镜像文件上传至Docker Hub

    一.Docker Hub中新建存储库 注册,登录Docker Hub之后,点击右上角Create Repository,创建存储库,如下图所示: 取个名字,我这里取名为lihui_demo.并且可以选 ...

  6. 如何安装miniconda(python虚拟环境)

    anaconda是用于科学计算的python发行版本(可用于python虚拟环境的管理),miniconda是简化版的anaconda 1.下载安装miniconda 下载miniconda 因为An ...

  7. 在子页面操作父页面元素和iframe说明

    实现功能:在子页面操作父页面元素. 在实际编码的过程中,大家一定有这种需求:在父级页面有一个<iframe scrolling='auto'></iframe>内联框架,而我们 ...

  8. ipc基础

    ipc对象持久性 进程持久性:具有这种持久性的对象在持有它的最后一个进程关闭了该对象为止 内核持久性:这种IPC对象一直存在直到内核重新自举或显示删除该对象为止 文件系统持久性:具有这种持久性的对象只 ...

  9. 项目管理软件 GanttProject 节日表

    项目管理软件 GanttProject 节日表 GanttProject 是一款项目管理软件,对比一些商业项目管理软件一点不差,有些还更强大,比如以下的节假日自动选择. 文件地址在:C:\Progra ...

  10. day 13

    递归函数   一.初始递归 递归函数:在一个函数里在调用这个函数本身. 递归的最大深度:998 正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去.但是我们之前已经说过关于函数调用的问题, ...