原文地址:http://johnnyfee.github.io/csharp/2013/12/21/cef-glue/

前言

如果你想使用WEB技术来开发桌面客户端,并且是想使用的语言也是C#时,那请耐心往下看。使用WEB技术开发桌面客户端的核心其实就是使用一个能够独立运行WEB前端的组件,如WinForm中的WebBrowser,Android平台的WebView,以及Qt提供的WebView,等等。对于桌面客户端开发而言,使用WebBrowser空间依赖于客户端安装的IE浏览器版本,而且IE本身的种种诟病让人望而生畏。而如今,Chrome浏览器突飞猛进的发展大家有目共睹,而且其使用的核心 CEF 和Webkit一样是开源的。由于Chromium是C/C++开发的,想要在C#中使用需要再次封装,一些基于Chromium的浏览器控件便应运而生。如今,市面上存在的基于Chromium的C#封装有:

关于这几个项目的优劣, 牛A与牛C之间 做了非常细致的比较,请参看 .NET多种WebKit内核/Blink内核浏览器初步测评报告 。最终优胜的为 Xilium.CefGlue 。此前,本作者使用过 CefSharp ,感觉很明显的优点是JS和C#之间的互调非常方便,由于本作者只是使用CefSharp开发一个小工具,所以性能和发布方面的问题暂时未碰到。

值得一提的是CEF有两个版本CEF1和CEF3。

  • CEF1是单进程的。实现了更多的特性,内存使用更少,与客户端应用更能完美的结合,使用的是WebKit的API,但是FLASH无法在这个框架中正常播放,不支持html5的音频和视频,只支持NPAPI插件。关于NPAPI插件的相关知识,请参阅这里: http://developer.chrome.com/extensions/npapi.html 。

  • CEF3是多进程的。使用异步消息的方式来完成主进程和其他进程的通信(其他进程有可能是Webkit,也有可能是V8的解析引擎进程),使用的是chromium官方- 的内容呈现API,支持NPAPI和PPAPI插件,有一个单独的进程用于调试,相对于CEF1来说,虽然可以播放FLASH等视频,但是还有很多问题没有处理掉,社区里的人认为CEF1更稳定一些。

我们选用的是CEF3和Xilium.CefGlue,Xilium.CefGlue是对CEF项目的.net的包装,它是用P/Invoke的方式来调用CEF类库的,请参见:https://bitbucket.org/xilium/xilium.cefglue/wiki/Home。

下面我们就 Xilium.CefGlue 开发桌面应用中需要解决的问题逐一分析。

运行官方Demo

Clone或下载CefGlue

CefGlue的源码地址为 https://bitbucket.org/xilium/xilium.cefglue/ ,里边除了源码,还包含Winform和Wpf的Demo。Clone或者下载下来。

下载后,Unload或者删除其中的 CefGlue.Demo.GtkSharp 项目,这个项目是在Linux平台使用的。将 CefGlue.Demo.WinForms 设为启动项目。

下载CEF动态链接库

CefGlue依赖的CEF的 版本支持 请参考 http://xilium.bitbucket.org/cefglue/ 。CefGlue当前支持的CEF的最新版本为3.1650.1503,也就是当前的CEF的最新版本(不算开发分支),下载地址为 http://cefbuilds.com/ 。

CEF同时提供Linux、Mac、Windows平台的x86、x64版本,本作者所有的实验均在Windows平台完成,使用的系统为 Windows8 x64 。如果你的机器是x64的,那么x64和x86的CEF版本均可使用。唯一的区别是,如果你使用的是x86的版本,你需要将CefGlue项目的 CefGlue.Demo.WinForms 工程属性下的 Build 选项的Platform target设置为x86,而非默认的AnyCPU。我们以x64平台为例,假设下载下来的文件件为cef_binary_3.1650.1544_windows64。

  • 将 cef_binary_3.1650.1544_windows64/Release/ 或者cef_binary_3.1650.1544_windows64/Debug/ 下的内容拷贝到CefGlue项目下的 CefGlue.Demo.WinForms/CefGlue.Demo.WinForms/bin/Debug/ 目录下。当然,在实际项目中我们可能将这些文件拷贝到工程目录的一个文件夹中,然后使用工程属性下的Build Event选项将这些文件拷贝到Debug目录下,具体做法可以参考 怎么用CefGlue开发一个最简单的浏览器 。

  • 将 cef_binary_3.1650.1544_windows64/Resources/locales 目录下的文件拷贝到CefGlue.Demo.WinForms/CefGlue.Demo.WinForms/bin/Debug/locales 目录下。

运行即可成功,如果你有啥问题,欢迎共同探讨,或者加入QQ群244840771,群主为 牛A与牛C之间 。

基于CefGlue的桌面应用开发的更多相关文章

  1. heX——基于 HTML5 和 Node.JS 开发桌面应用

    heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.heX 是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁 ...

  2. (转)heX——基于 HTML5 和 Node.JS 开发桌面应用

    本文转载自:http://techblog.youdao.com/?p=685 简介:heX,一个允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.是你开发 ...

  3. 基于Qt Designer和PyQt5的桌面软件开发--环境搭建和入门例子

      本文介绍了如何使用技术栈PyCharm+Qt Designer+PyQt5来开发桌面软件,从环境搭建.例子演示到对容易混淆概念的解释.文中用到的全部软件+代码下载链接为:https://url39 ...

  4. nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

    第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...

  5. 【转贴】-- 基于QT的跨平台应用开发

    原帖地址:http://www.cnblogs.com/R0b1n/p/4106613.html 1 Qt简介 Qt是1991年奇趣科技开发的一个跨平台的C++图形用户界面应用程序框架.它提供给应用程 ...

  6. Web桌面应用框架3:Web桌面应用开发的N种Style

    研究Web桌面应用开发有一段时间了,总结了Web桌面应用开发的一些主流方式. 一.前端Style 这种方式的就是直接实现一个Web程序,再封装一个浏览器展示,相当粗暴和有效.著名的框架就是Electr ...

  7. 基于滴答清单 Web 开发的 PC 客户端

    基于滴答清单 Web 开发的 PC 客户端 关于「滴答清单」 滴答清单是一款不可多得的 GTD 效率工具,它有着清晰明了的界面设计.恰到好处的功能设置.稳定的同步服务,如果你还缺少一款简洁而有效的 G ...

  8. 基于CkEditor实现.net在线开发之路(7)列表页面开发动作介绍

    一个列表页面不止是查询,它也包含了很多业务上功能的实现,这些业务功能的实现的逻辑我称之为动作.如触发单击按钮删除数据,更改业务表数据,调用webService,调用WCF接口,弹出新窗体新增.修改.查 ...

  9. 基于ionic+angulajs的混合开发实现地铁APP

    基于ionic+angulajs的混合开发实现地铁APP 注:本博文为博主原创,转载时请注明出处. 项目源码地址:https://github.com/zhangxy1035/SubwayMap 一. ...

随机推荐

  1. Swift - 添加、修改、删除通讯录联系人

    使用AddressBook.framework框架,我们除了可以很方便的获取通信录里的联系人.同时,还能对通讯录进行新增.修改.删除联系人操作. (注意:这些操作同查询一样,首先需要发起授权请求) 1 ...

  2. Java多线程-实例解析

    Java多线程实例 3种实现方法Java中的多线程有三种实现方式:1.继承Thread类,重写run方法.Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯 ...

  3. JAVA 操作 DBF 文件数据库

    1.依赖夹包 javadbf-[].4.1.jar jconn3.jar 2.添加属性文件 jdbc.properties jdbc.driverClassName=com.sybase.jdbc3. ...

  4. NLP | 自然语言处理 - 标注问题与隐马尔科夫模型(Tagging Problems, and Hidden Markov Models)

    什么是标注? 在自然语言处理中有一个常见的任务,即标注.常见的有:1)词性标注(Part-Of-Speech Tagging),将句子中的每一个词标注词性,比如名词.动词等:2)实体标注(Name E ...

  5. Selenium WebDriver ie,chrome 驱动

    在驱动ie,chrome 的时候需要下载驱动 从网上下载IEDriverServer,Chromedriver 然后需要配置下就可以驱动ie,chrome 浏览器了 selenium 驱动ie 和 c ...

  6. JAVA之成员变量初始化

    java中成员变量的初始化,如果是普通成员变量可以赋初值,如果没赋初值,则系统会自动赋初值.而对于局部变量必须手动赋初值. package MyText2; public class MyText1 ...

  7. sed正则表达式

    sed的正则匹配如何实现非贪婪? sed的正则用的是BREs/EREs,不支持非贪婪模式.当然有一些方法可以实现非贪婪,比如: $ echo abcOabcdOabc | sed 's/.*O//' ...

  8. LintCode 推断一个二叉树树是否是还有一个二叉树的子书

    有两个不同大小的二进制树: T1 有上百万的节点: T2 有好几百的节点. 请设计一种算法.判定 T2 是否为 T1的子树. /** * Definition of TreeNode: * class ...

  9. 新秀操作和维护注意事项:Windows关于使用Xshell管理你的云主机

    假设你PC它是linux系统.那么直接与终端ssh命令就可以了.假设Windows系统.使用它是必要的sshclient. PS:我双系统. 有时候,他们想使用Windows的. Windows上ss ...

  10. delphi 怎么将一个文件流转换成字符串(String到流,String到文件,相互转化)

    //from   http://kingron.myetang.com/zsfunc0d.htm (*//   标题:充分利用pascal字符串类型   说明:和PChar不同,string可以保存# ...