当为 WPF 或 WinForms 应用程序选择 Browser 组件时,DotNetBrowser 和 CefSharp 显然都是不错的选择。
本文阐述了 DotNetBrowser 和 CefSharp 之间的区别,以及如何在两者之间进行选择。
简而言之
以下情况选择开源 CefSharp:
- 您必须使用免费软件。
以下情况选择商业版 DotNetBrowser:
- 您需要自定义功能。
- 您希望获得产品使用方面的帮助。
- 您希望秘密报告问题并修复它们。
- 您需要在 Linux 和 macOS 上运行。
- 您需要将浏览器嵌入到 Office 应用程序中。
- 您对软件安全有要求。
支持与更新
CefSharp 是一个开源项目。如果您发现了 bug 或者需要新增功能,可以提交报告或者参与贡献。2022 年,该项目发布了 33 个主要和次要版本。
DotNetBrowser 是一款专为商业公司设计和创建的商业产品。
我们设有专门的客户服务台系统,客户提交的报告会严格保密。我们保证的首次响应时间,或服务级别协议(SLA),为一个工作日。
技术支持包括:
- 产品使用帮助。
- 及时修复 bug。
- 故障排除协助。
- 考虑功能请求。
您的所有支持请求将由 DotNetBrowser 的软件工程师处理。
DotNetBrowser 几乎每个月都会发布新版本。我们会在 Chromium 官方发布后的 3-4 周内,将其升级到最新的稳定版本(包含最新的安全补丁和已修复的漏洞)。
Linux 和 macOS
DotNetBrowser 可以在 Linux 和 macOS 上本地运行,支持 x86-64 和 ARM 平台。
DotNetBrowser 支持 Avalonia UI 框架,并可以在 Blazor 混合应用程序中使用。
架构
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 则只能在默认的应用程序域中工作。
H.264, AAC
在 DotNetBrowser 中,专有编解码器(如 H.264 和 AAC)可开箱即用。它们默认是禁用的,但您可以在代码中启用它们:
IEngine engine = EngineFactory.Create(new EngineOptions.Builder
{
ProprietaryFeatures = ProprietaryFeatures.H264 | ProprietaryFeatures.Aac
}.Build());
CefSharp 不支持专有编解码器。
高 DPI 支持
在 CefSharp 中,Browser 子进程的默认 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 提供对扩展程序打开的弹出窗口的完全控制,并允许使用扩展程序的功能。
CefSharp 对扩展程序的支持非常有限。
免费试用
获取您的免费许可证,并根据您的需求选择以下适合您的入门指南。只需 5 分钟,即可开启您的 DotNetBrowser 体验之旅: