前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET桌面程序集成Web网页开发的十种解决方案

.NET桌面程序集成Web网页开发的十种解决方案

作者头像
张传宁IT讲堂
发布于 2022-05-09 12:12:53
发布于 2022-05-09 12:12:53
3.2K0
举报

系列目录     【已更新最新开发文章,点击查看详细】

  B/S架构的Web程序几乎占据了应用软件的绝大多数市场,但是C/S架构的WinForm、WPF客户端程序依然具有很实用的价值,如设计类软件 AutoCAD与Autodesk Revit、WPS、IT类的集成开发环境数据库、图形处理软件)、PC端的小工具等等,充分利用了客户端电脑的资源综合计算能力,处理性能更加优秀。如果想在C/S架构的客户端程序中集成Web应用,也只能借助Web网页,然后将网页集成到客户端程序中,这样就间接的达到了目的。下面是客户端审图系统中集成Web网页的实际应用案例

WinForm程序中集成网页的基本原理就是通过一个包含类似浏览器功能的控件,将Web网页载入并解析渲染出来。

  介绍 WinForm、WPF 集成 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

控件1:WebBrowser

  微软WinForm开发框架中老牌控件。

  • 默认基于IE7内核,对H5网页加载支持不完善。
  • 只支持单线程模式,大部分对其操作必须在创建它的线程中执行,不可以在其它线程中调用其方法或属性。
  • 性能相对较弱。

控件2:WebView

WebView 使用原始的 Edge (Trident) 渲染引擎,是 Windows10 唯一的控件,功能、性能不理想。

控件3:Microsoft Edge WebView2【强烈推荐】

Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge(Chromium) 作为绘制引擎,以在本机应用中显示 web 内容。 使用 WebView2,可以在本机应用的不同部分嵌入 Web 代码,或在单个 WebView 实例中生成所有本机应用。

下图是在Winform程序中使用WebView2组件加载我的博客园页面的效果

控件4: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较全面。
  • 通过NeGet安装SDK时,运行时环境会被自动下载到当前项目的bin\debug 或者 bin\Release目录下。导致整个项目非常大,大约110M左右。
  • 以独立进程方式运行,消耗内存较多。
  • 当控件Dock属性设置为 Fill,客户端电脑的缩放与布局不是100%时,窗体呈现黑边(严重bug),并没有完全填充父容器

实际项目应用效果如下图(缩放比例为100%):

呈现的模型是三维BIM模型,里面用到了HTML5、CSS3、WebGL等新技术。

控件5:Miniblink

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

控件6:GeckoFX

GeckoFX是skybound工作室开发的一个开源的用于方便将gecko引擎(最主要的浏览器是firefox)链接到.net 窗体应用的一个组件。它是用C#写成的,里面有大量的C#的注释,geckofx是最完美的默认的iE核心webbrowse控件的替代控件。

控件7:DotNetBrowser

DotNetBrowser能嵌入一个基于Chromium的WPF或WinForms组件到你的.NET应用中,用来显示使用HTML5、CSS3、JavaScript、Silverlight等技术构建的现代网页。

  • 收费

控件8:EO.WebBrowser

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

控件9:Sciter.Forms

Sciter.Forms是基于Sciter桌面引擎的.NET类库,支持.net framework4.x、.NET CORE、.NET5及更高版本,支持Windows及Linux桌面系统。

  • Sciter为桌面UI开发带来了一系列web技术。网页设计师和开发人员可以在创建外观现代的桌面应用程序时重用他们的经验和专业技能。
  • Sciter允许使用经过时间验证、健壮且灵活的HTML和CSS来定义GUI,并使用GPU加速渲染。
  • Sciter引擎是一个单一的、紧凑的DLL,大小为5+Mb。使用它的应用程序比使用Electron或Qt构建的应用程序小10倍以上。

官网:https://sciter.com/

开源地址:https://gitlab.com/c-smile/sciter-js-sdk

控件10:aardio

aardio专注于桌面软件开发,17年一直保持非常活跃地更新,aardio 被多年用于生产项目实践,久经测试和锤炼。

aardio 小、轻、快,轻便利索,体积仅 6.5MB,学习和使用成本极低。aardio 虽然小,但提供了惊人数量的开源标准库、扩展库 - 这些库基本都是由纯 aardio 代码实现,涉及到了桌面编程的方方面面。

aardio 可以嵌入非常多的浏览器控件,例如系统自带的 WebBrowser、WebView 控件、 以及 WebView2、WebKit、Electron、CEF3、HTMLayout、Sciter...... 甚至可以直接调用系统安装的 Chrome、Chromium Edge 等浏览器写软件界面。而且在网页中调用本地接口、以及 aardio 与浏览器的交互极其方便,例如直接调用 Javascript 函数,并且在 Javascript 中直接回调 aardio 函数,不需要任何复杂的封装和中间件,你甚至可以在 Javascript 中直接调用 WINAPI 函数。

系列目录     【已更新最新开发文章,点击查看详细】

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
SciPy详解
在Python科学计算领域,SciPy是一个非常重要的库。它提供了许多用于数值计算、优化、积分、统计和许多其他科学计算任务的功能。SciPy构建在NumPy之上,为数学、科学和工程领域的广泛问题提供了高效的解决方案。本教程将介绍SciPy的主要功能和用法,并提供一些示例以帮助您快速入门。
Michel_Rolle
2024/02/07
2.9K0
统计建模——模型——python为例
应用方式:用于研究一个连续因变量与一个或多个自变量之间的线性关系。通过对数据进行拟合,确定自变量对因变量的影响程度(系数),并可以用来预测给定自变量值时因变量的期望值。例如,在经济学中,用于分析GDP与投资、消费、出口等因素的关系;在市场营销中,预测销售额与广告支出、价格、季节因素等的关系。
小李很执着
2024/06/15
3310
统计建模——模型——python为例
概率、统计学在机器学习中应用:20个Python示例
在数据科学和机器学习领域,概率论和统计学扮演着至关重要的角色。Python作为一种强大而灵活的编程语言,提供了丰富的库和工具来实现这些概念。本文将通过20个Python实例,展示如何在实际应用中运用概率论和统计学知识。
Ai学习的老章
2024/09/18
2750
概率、统计学在机器学习中应用:20个Python示例
SciPy从入门到放弃
SciPy是一种以NumPy为基础,用于数学、工程及许多其他的科学任务的科学计算包,其使用的基本数据结构是由NumPy模块提供的多维数组,因此Numpy和SciPy协同使用可以更加高效地解决问题。SciPy很适合用于十分依赖数学和数值运算的问题,其内部的模块包括优化模块、线性代数模块、统计模块、傅里叶变化模块、积分模块、信号处理模块、图像处理模块、稀疏矩阵模块、插值模块等。
愷龍
2024/08/15
1410
SciPy从入门到放弃
statsmodels︱python常规统计模型库
之前看sklearn线性模型没有R方,F检验,回归系数T检验等指标,于是看到了statsmodels这个库,看着该库输出的结果真是够怀念的。。
悟乙己
2020/03/27
3.3K0
python中的scipy模块
scipy包含致力于科学计算中常见问题的各个工具箱。它的不同子模块相应于不同的应用。像插值,积分,优化,图像处理,统计,特殊函数等等。
狼啸风云
2019/08/31
5.6K0
【Python数值分析】革命:引领【数学建模】新时代的插值与拟合前沿技术
插值是一种在已知数据点之间估算函数值的方法。它在数据分析、信号处理和数值分析中具有广泛应用。插值的目标是通过构造一个插值函数,使该函数在给定的数据点处具有精确的函数值。
小李很执着
2024/08/05
4240
【Python数值分析】革命:引领【数学建模】新时代的插值与拟合前沿技术
python数据统计分析「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说python数据统计分析「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/09/12
1.8K0
python数据统计分析「建议收藏」
广义线性模型(GLM)及其应用
来源:Deephub Imba本文约1800字,建议阅读5分钟广义线性模型是线性模型的扩展,通过联系函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。 广义线性模型[generalize linear model(GLM)]是线性模型的扩展,通过联系函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。它的特点是不强行改变数据的自然度量,数据可以具有非线性和非恒定方差结构。是线性模型在研究响应值的非正态分布以及非线性模型简洁直接的线性转化时的一种发展。 在广义线性模型的理论框架中,则假设目
数据派THU
2022/09/07
1.5K0
广义线性模型(GLM)及其应用
广义线性模型(GLM)及其应用
广义线性模型[generalize linear model(GLM)]是线性模型的扩展,通过联系函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。它的特点是不强行改变数据的自然度量,数据可以具有非线性和非恒定方差结构。是线性模型在研究响应值的非正态分布以及非线性模型简洁直接的线性转化时的一种发展。
deephub
2022/11/11
9360
广义线性模型(GLM)及其应用
Scipy 中级教程——插值和拟合
Scipy 提供了丰富的插值和拟合工具,用于处理实验数据、平滑曲线、构建插值函数等。在本篇博客中,我们将深入介绍 Scipy 中的插值和拟合功能,并通过实例演示如何应用这些工具。
Echo_Wish
2024/01/12
7600
深度好文 | 探索 Scipy 与统计分析基础
云朵君推荐 本文部分内容仅展示部分核心代码,本文提供含完整代码的完整PDF版本下载,获取方式:关注公众号 「数据STUDIO」并回复【210512】获取。若你对代码不感兴趣,直接略过,不影响阅读。
数据STUDIO
2021/06/24
3.1K0
一文囊括时间序列方法(源码)
时间序列是指将某种现象某一个统计指标在不同时间上的各个数值,按时间先后顺序排列而形成的序列。典型的时间序列问题,例如股价预测、制造业中的电力预测、传统消费品行业的销售预测、客户日活跃量预测等等。(本文以客户日活跃量预测为例。)
算法进阶
2022/06/01
8460
一文囊括时间序列方法(源码)
8个常用的Python数据分析库(附案例+源码)
今天给大家分析8个Python中常用的数据分析工具,Python强大之处在于其第三方扩展库较多。 本文介绍数据分析方面的扩展库分别为:NumPy、SciPy、Matplotlib、Pandas、StatsModels、Scikit-learn、Keras、Gensim,下面对这八个扩展库进行简单介绍,以及相关的代码案例
Python研究者
2021/12/15
15.7K0
8个常用的Python数据分析库(附案例+源码)
python 中的scipy模块
https://docs.scipy.org/doc/scipy-0.18.0/reference/ (参考链接) Python 中常用的统计工具有 Numpy, Pandas, PyMC, Sta
润森
2019/08/29
2.2K0
python 中的scipy模块
统计学最重要的10个概念【附Pyhon代码解析】
平均值是一组数据的算术平均数,计算方法是将所有数值相加后除以数据的总数。它是最常用的集中趋势度量,但容易受极端值影响。
Ai学习的老章
2024/09/12
1880
统计学最重要的10个概念【附Pyhon代码解析】
突出最强算法模型——回归算法 !!
特征选择是指从所有可用的特征中选择最相关和最有用的特征,以用于模型的训练和预测。而特征工程则涉及对原始数据进行预处理和转换,以便更好地适应模型的需求,包括特征缩放、特征变换、特征衍生等操作。
JOYCE_Leo16
2024/03/19
2080
突出最强算法模型——回归算法 !!
金融量化 - scipy 教程(01)
前篇已经大致介绍了NumPy,接下来让我们看看SciPy能做些什么。NumPy替我们搞定了向量和矩阵的相关操作,基本上算是一个高级的科学计算器。SciPy基于NumPy提供了更为丰富和高级的功能扩展,在统计、优化、插值、数值积分、时频转换等方面提供了大量的可用函数,基本覆盖了基础科学计算相关的问题。
公众号---人生代码
2020/06/19
1.3K0
金融量化 - scipy 教程(01)
Scipy 高级教程——统计学
Scipy 提供了强大的统计学工具,用于描述、分析和推断数据的分布和性质。本篇博客将深入介绍 Scipy 中的统计学功能,并通过实例演示如何应用这些工具。
Echo_Wish
2024/01/16
3060
使用Python NumPy库进行高效数值计算
NumPy(Numerical Python)是一个强大的Python库,用于进行科学计算和数值操作。它提供了高性能的多维数组对象(numpy.array)以及用于处理这些数组的各种函数。NumPy是许多数据科学和机器学习库的基础,如Pandas、SciPy和Scikit-learn等。本文将深入介绍NumPy库的使用,包括数组的创建、操作、数学运算、统计分析等方面。
Michel_Rolle
2024/01/27
2.9K1
相关推荐
SciPy详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档