当为 WPF 或 WinForms 应用程序选择 Browser 组件时,DotNetBrowser 和 CefSharp 显然都是不错的选择。
本文阐述了 DotNetBrowser 和 CefSharp 之间的区别,以及如何在两者之间进行选择。
概览
授权类型 | 开源 | 商业授权 |
支持的操作系统 | 仅限 Windows | Windows、macOS、Linux |
支持的 UI 工具包 | WinForms、WPF | WinForms、WPF、Avalonia、Win UI 3 |
进程内存隔离 | 不支持 | 支持 |
每年发布次数 | 19 次 | 12 次 |
技术支持 | 不提供 | 提供保密支持,含服务等级协议(SLA) |
以下情况选择开源 CefSharp:
- 您必须使用免费软件。
以下情况选择商业版 DotNetBrowser:
- 您需要自定义功能。
- 您希望获得产品使用方面的帮助。
- 您希望秘密报告问题并修复它们。
- 您需要在 Linux 和 macOS 上运行。
- 您需要将浏览器嵌入到 Office 应用程序中。
- 您对软件安全有要求。
Linux 和 macOS
DotNetBrowser 可以在 Linux 和 macOS 上本地运行,支持 x86-64 和 ARM 平台。
DotNetBrowser 支持 Avalonia UI 框架,并可以在 Blazor 混合应用程序中使用。
DotNetBrowser 在 macOS 上通过 Avalonia 框架运行
DotNetBrowser 在 Linux 上通过 Avalonia 框架运行
架构
CefSharp 是一个基于 Chromium Embedded Framework(CEF)的 .NET 包装器。这个包装器是通过 C++/CLI 实现的。
而 DotNetBrowser 在底层不使用 CEF 或 C++/CLI。它采用了自己独特的方法来直接与 Chromium 集成。
进程内 vs. 进程外
CefSharp 在 .NET 进程内启动 Chromium Engine。该库要求引擎必须在主应用程序线程中启动和关闭,并且在整个进程生命周期中只能启动一次。
而 DotNetBrowser 则将 Chromium Engine 作为单独进程启动。无需在主 UI 线程上执行此操作,甚至可以在工作线程上执行。您可以随时启动和关闭 Chromium。同时,您还可以同时使用多个 Chromium Engine。
DotNetBrowser 架构
CefSharp 架构
稳定性与安全性
CefSharp 的模式允许您更快地启动应用程序,但它也有一些主要缺陷:
- CefSharp 不支持内置的 Chromium 沙箱。
- CefSharp 消耗 .NET 进程的内存和 CPU。
- 如果 CefSharp 崩溃,整个应用程序也会崩溃。
- 由于 .NET 进程和 Chromium 使用相同的地址空间,因此 .NET 进程容易受到 Chromium 中的安全漏洞的影响。
而在 DotNetBrowser 中,Chromium 内部的错误不会导致您的 .NET 应用程序崩溃。相反,您可以检测和适当处理崩溃:
engine.Disposed += (s, e) =>
{
long exitCode = e.ExitCode;
// 如果退出代码非零,则表示引擎已崩溃。
});
分发与部署
CefSharp 需要在环境中安装 Microsoft Visual C++ Runtime。
而 DotNetBrowser 自带所有必需的 Chromium 二进制文件和 DLL, 无需预先安装 Microsoft Visual C++ Runtime 即可使用 DotNetBrowser。
嵌入到 Office 中
DotNetBrowser 可以在非默认的应用程序域(AppDomains)中工作,因此可以使用 VSTO 插件或 Excel-DNA 将其嵌入到 Office 应用程序中。
而 CefSharp 则只能在默认的应用程序域中工作。
专有编解码器
DotNetBrowser 开箱即用即可支持专有编解码器。这些功能默认是禁用的,但您可以通过代码启用它们:
IEngine engine = EngineFactory.Create(new EngineOptions.Builder
{
ProprietaryFeatures = ProprietaryFeatures.H264 | ProprietaryFeatures.Aac
}.Build());
而 CefSharp 发布时并不包含对专有编解码器的支持。
高 DPI 支持
在 CefSharp 中,浏览器子进程的默认 DPI 感知模式是 按显示器(Per-Monitor)感知。这要求整个应用程序都具备 DPI 感知能力,对于较旧的软件来说可能是一个问题。
相比之下,DotNetBrowser 会自动检测 .NET 进程的 DPI 感知状态,并与之保持一致。
DOM 访问
在 CefSharp 中,访问 DOM 的唯一方式是使用 JavaScript。而 DotNetBrowser 则提供了直接在代码中操作 DOM 的 API:
IDocument document = browser.MainFrame.Document;
document.GetElementById("button").Click();
PointInspection inspection = browser.MainFrame.Inspect(new Point(100, 150));
INode nodeAtPoint = inspection.Node;
Chrome 扩展程序
DotNetBrowser 支持 Chrome 扩展程序。开发人员可以从 CRX 文件中安装扩展程序,或允许用户使用 Chrome 应用商店。
DotNetBrowser 提供对扩展程序打开的弹出窗口的完全控制,并允许使用扩展程序的功能。
在 DotNetBrowser 中启动的扩展程序
CefSharp 对扩展程序的支持非常有限。
支持与更新
CefSharp 是一个开源项目。如果您发现了 bug 或需要某项功能,可以提交问题报告,或者自行贡献代码。在 2024 年,该项目发布了 19 个大大小小的版本。
DotNetBrowser 是一个专为商业公司设计和开发的商业软件产品。在 2024 年,DotNetBrowser 发布了 12 个主要版本,并同步升级了 Chromium 内核。
我们提供私密的工单支持系统,客户的所有报告均会保密处理。我们的服务等级协议(SLA)承诺首个响应时间为一个工作日内。
我们的技术支持服务包括:
- 产品使用方面的协助;
- 及时修复 bug;
- 故障排查支持;
- 功能需求的评估与反馈。
您的所有支持请求都将由 DotNetBrowser 的软件工程师直接处理。
DotNetBrowser 几乎每个月都会发布新版本。我们会在 Chromium 官方发布后的 3-4 周内,将其升级到最新的稳定版本(包含最新的安全补丁和已修复的漏洞)。
免费试用
发送中。。。
您的个人 DotNetBrowser 试用密钥和快速入门指南将在几分钟内发送至您的电子邮箱。
获取您的免费许可证,并根据您的需求选择以下适合您的入门指南。只需 5 分钟,即可开启您的 DotNetBrowser 体验之旅: