当为 WPF 或 WinForms 应用程序选择 Browser 组件时,DotNetBrowser 和 CefSharp 显然都是不错的选择。

本文阐述了 DotNetBrowser 和 CefSharp 之间的区别,以及如何在两者之间进行选择。

简而言之 

以下情况选择开源 CefSharp:

  • 您必须使用免费软件。

以下情况选择商业版 DotNetBrowser:

  • 您需要自定义功能。
  • 您希望获得产品使用方面的帮助。
  • 您希望秘密报告问题并修复它们。
  • 您需要在 Linux 和 macOS 上运行。
  • 您需要将浏览器嵌入到 Office 应用程序中。
  • 您对软件安全有要求。
Spinner

发送中。。。

抱歉,发送中断

请再次尝试,如果问题仍然存在,请联系我们 info@teamdev.com.

阅读并同意条款以继续。

您的个人 DotNetBrowser 试用密钥和快速入门指南将在几分钟内发送至您的电子邮箱。

支持与更新 

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 架构

DotNetBrowser 架构

CefSharp 架构

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 对扩展程序的支持非常有限。

免费试用 

Spinner

发送中。。。

抱歉,发送中断

请再次尝试,如果问题仍然存在,请联系我们 info@teamdev.com.

阅读并同意条款以继续。

您的个人 DotNetBrowser 试用密钥和快速入门指南将在几分钟内发送至您的电子邮箱。

获取您的免费许可证,并根据您的需求选择以下适合您的入门指南。只需 5 分钟,即可开启您的 DotNetBrowser 体验之旅: