WinForm嵌入Web网页的解决方案
企业级信息化系统绝大部分采用BS架构实现,如门户网站、OA系统、电商网站等,通过浏览器输入Web网址即可访问,对于使用者来说非常便捷,对于开发维护者来说也非常方便,程序维护只需更新服务器即可,使用者无感知。但是CS架构的WinForm客户端程序仍然具有很实用的价值,如WPS、IT类的集成开发环境(数据库、图形处理软件)、PC端的小工具。本地程序处理性能更优秀,但是频繁更新带来不友好的客户端体验。还有一种非常常见且实用的业务场景, Web网页与WinForm程序互相集成应用。
在百度网盘的网页中,点击【下载】按钮,首先会检查本地是否已经启动客户端网盘。如果未启动,则弹出提示信息告知用户需要打开客户端程序进行下载。这就是一个典型的Web网页中启动客户端程序的场景。更形象的应用场景是,WinForn/WPF客户端程序嵌入Web程序,Web程序的网页中js调用WinForm/WPF窗体以及业务方法。后面会详细的介绍。

WinForm程序中集成网页的基本原理就是通过一个包含类似浏览器功能的控件,将Web网页载入并解析渲染出来。下面主要介绍 WinForm 集成 Web 网页的几种实现方式。

谈论集成的问题之前,先了解一下浏览器的内核。
浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“渲染引擎”,不过我们一般习惯将之称为“浏览器内核”。负责对网页语法的解释(如标准通用标记语言下的一个应用HTML、JavaScript)并渲染(显示)网页。 所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核的浏览器中测试网页显示效果的原因。

- Trident(MSHTML、IE内核)
内核被包含在全世界最高的使用率的操作系统中,即为Windows操作系统,所以我们又经常把它称之为IE内核。
Trident内核的常见浏览器有:
- IE6、IE7、IE8(Trident 4.0)、IE9(Trident 5.0)、IE10(Trident 6.0)、IE11
- 360安全浏览器(1.0-5.0为Trident,6.0为Trident+Webkit,7.0为Trident+Blink)
- 360极速浏览器(7.5之前为Trident+Webkit,7.5为Trident+Blink)
- 百度浏览器(早期版本)
- 世界之窗浏览器(最初为IE内核,2013年采用Chrome+IE内核)
- UC浏览器(Webkit内核+Trident内核)
- 其他等
其中部分浏览器的新版本是“双核”甚至是“多核”,其中一个内核是Trident,然后再增加一个其他内核。国内的厂商一般把其他内核叫做“高速浏览模式”,而Trident则是“兼容浏览模式”,用户可以来回切换。
- Gecko(Firefox内核)
Gecko内核常见的浏览器:Mozilla Firefox、Mozilla SeaMonkey、waterfox(Firefox的64位开源版)、Iceweasel、Epiphany(早期版本)、Flock(早期版本)、K-Meleon。
- Webkit(Safari内核,Chrome内核原型,开源)
WebKit内核常见的浏览器:Chrome、傲游浏览器3、Apple Safari (Win/Mac/iPhone/iPad)、Symbian手机浏览器、Android 默认浏览器。

参考网站:https://liulanmi.com/labs/core.html
- Blink
Blink是一个由Google和Opera Software开发的浏览器排版引擎,Google计划将这个渲染引擎作为Chromium计划的一部分,并且在2013年4月的时候公布了这一消息。这一渲染引擎是开源引擎WebKit中WebCore组件的一个分支,并且在Chrome(28及往后版本)、Opera(15及往后版本)和Yandex浏览器中使用。

- ie.icoa.cn
https://ie.icoa.cn 可检测 PC 或手机浏览器内核和操作系统类型,包括Google Chrome的WebKit、IE的Trident、ME的Edge、Firefox的Gecko/Servo,以及Windows/MacOS/Linux/iOS/Android等的判断。



- http://mybrowse.osfipin.com

- WebBrowser
微软WinForm开发框架中老牌控件。
- 默认基于IE7内核,对H5网页加载支持不完善。
- 只支持单线程模式,大部分对其操作必须在创建它的线程中执行,不可以在其它线程中调用其方法或属性。
- 性能相对较弱。
- CefSharp【推荐】
CefSharp是一种将功能齐全的符合标准的web浏览器嵌入C#或VB.NET应用程序的简单方法。CefSharp拥有WinForms和WPF应用程序的浏览器控件,以及自动化项目的OffScreen版本。CefSharp基于Chromium Embedded Framework,这是Google Chrome的开源版本。
- CefSharp中文帮助文档,请点击查看
- 免费、开源:https://github.com/cefsharp/CefSharp
- 支持JS、C#、WinForm窗体之间相互通讯与调用。
- 兼容性较好,支持H5、CSS5、WebGL等。
- 支持获取Cookies较全面。
实际项目应用效果如下:

- Miniblink
Miniblink是一个追求极致小巧的浏览器内核项目,全世界第三大流行的浏览器内核控件。其基于chromium最新版内核,去除了chromium所有多余的部件,只保留最基本的排版引擎blink。Miniblink保持了10M左右的极简大小,是所有同类产品最小的体积,同时支持windows xp、npapi。

- GeckoFX
GeckoFX是skybound工作室开发的一个开源的用于方便将gecko引擎(最主要的浏览器是firefox)链接到.net 窗体应用的一个组件。它是用C#写成的,里面有大量的C#的注释,geckofx是最完美的默认的iE核心webbrowse控件的替代控件。
- DotNetBrowser
DotNetBrowser能嵌入一个基于Chromium的WPF或WinForms组件到你的.NET应用中,用来显示使用HTML5、CSS3、JavaScript、Silverlight等技术构建的现代网页。

- 收费
- EO.WebBrowser
- 官网:https://www.essentialobjects.com/Products/WebBrowser/Default.aspx
- 收费

所以在客户端程序中嵌入网页程序,首选CefSharp。
WinForm嵌入Web网页的解决方案的更多相关文章
- Unity3d嵌入web网页
应用场景 程序中的界面风格 UI内容等相关内容需要很容易方便的跟新替换,不使用unity传统的热加载方式,也不想使用和H5等做混合APP的时候, 就用嵌入web来实现. 假如我想替换某个背景图,一般来 ...
- .NET桌面程序集成Web网页开发的多种解决方案
系列目录 [已更新最新开发文章,点击查看详细] B/S架构的Web程序几乎占据了应用软件的绝大多数市场,但是C/S架构的WinForm.WPF客户端程序依然具有很实用的价值,如设计类软件 Au ...
- C#开发BIMFACE系列49 Web网页中加载模型与图纸的技术方案
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在BIMFACE二次系列博客中详细介绍了服务器端API的调用方式,如下列表 C#开发BIMFACE系列1 BIMFAC ...
- 宣布发布 Windows Azure 导入/导出服务的预览版以及 Web 和移动解决方案场景的若干增强功能
客户评估基于云的存储解决方案时,面临的挑战之一是以经济高效.安全快速的方式从 Blob 存储区移进和移出大量数据.今天,我们很高兴地宣布发布 Windows Azure 导入/导出的预览版,这款新服务 ...
- C# winform嵌入unity3D
最近做项目需要winform嵌入unity的功能,由于完全没接触过这类嵌入的于是在网上搜,有一种方法是UnityWebPlayer插件,也开始琢磨了一段时间,不过一会发现在5.4版本以后这个东西就被淘 ...
- web网页练习
一. HTML部分 1. XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同: XHTML 元素必须被正确地嵌套. XHTML 元 ...
- 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...
- 嵌入web字体
@font-face模块 可以帮助我们轻松解决Web页面中使用优雅字体的方式,而且我们可以根据需要自定义多种字体,但是每个@font-face只能定义一种,若需要多个字体就启用多个@f ...
- iOS-仿支付宝加载web网页添加进度条
代码地址如下:http://www.demodashi.com/demo/11727.html 目前市场上APP常会嵌入不少的h5页面,参照支付宝显示web页面的方式, 做了一个导航栏下的加载进度条. ...
随机推荐
- Flink进入大厂面试准备,收藏这一篇就够了
1. Flink 的容错机制(checkpoint) Checkpoint机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态 ...
- rz上传文件报错:rpm Read Signature failed: sigh blob(1268): BAD, read returned 0
上传文件报错: [root@www localdisk]# rpm -ivh cobbler* error: cobbler-2.8.4-4.el7.x86_64.rpm: rpm Read Si ...
- 章节1-Prometheus基础(1)
目录 一.Prometheus安装部署 1. 简介 监控的目的 Prometheus的优势 2. Prometheus工作流程: 2.1 服务端 2.2 客户端 2.3 metrics主要数据类型 3 ...
- NTP时间服务器配置
1.服务器端配置: #允许这些IP向自己同步时间 restrict x.x.x.x mask x.x.x.x nomodiy notrap #当和定义的所有server服务器无法同步后,和自身同步 s ...
- python twain
self.SD.SetCapability(twain.CAP_DUPLEXENABLED, twain.TWTY_BOOL, 0) #单面扫描 self.SD.SetCapability(twain ...
- Java基础00-Stream流34
1. Stream流 Stream流 1.1 体验Stream流 代码示例: //需求:按照下面的要求完成集合的创建和遍历 public class StreamDemo { public stati ...
- [刘阳Java]_酷炫视频播放器制作_JS篇
此文章是接着上次写的<酷炫视频播放器制作_界面篇>将其完善,我们主要给大家介绍一下如何利用JS脚本来控制视频的播放.为了让大家能够保持对要完成的功能有直接的了解,我们还是将效果图附到文章里 ...
- Jenkins 进阶篇 - 权限案例实践
为了演示方便,我这里创建了如下的一些任务,各个任务由包含在对应的目录中树形结构大概如下: jenkins-authority 目录类型任务 ├── dev-project-group 目录类型任务 │ ...
- 基于小熊派Hi3861鸿蒙开发的IoT物联网学习【二】
HarmonyOS内核开发-信号量开发案例学习记录 一.LiteOS里面的任务管理介绍: 任务状态通常分为以下四种: 就绪(Ready):该任务在就绪列表中,只等待CPU. 运行(Running) ...
- linux 之awk--格式化文本信息
https://www.cnblogs.com/xudong-bupt/p/3721210.html awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常 ...