谈到嵌入式浏览器,业界提供了各种各样的解决方案:免费的和收费的,开源的和专有的。这些解决方案在功能、使用方式和附带服务等方面都各不相同。本文旨在帮助您做出正确的选择。

上一篇文章中,我们拿开源的 CefSharp 与 DotNetBrowser 进行了比较,并给出了如何选择的建议。

今天,我们将研究专有的 WebView2,并进一步向您证明 DotNetBrowser 更适合商业用途。我们将先从组织和法律方面开始讨论,然后再探讨其功能差异。

简而言之

DotNetBrowser 和 WebView2 均来自在此领域拥有丰富经验的商业公司,是成熟的解决方案。因此,您获得的一定是一个功能正常且不依赖开源社区的软件解决方案。

以下情况选择 WebView2:

  • 您必须使用免费软件。
  • 您想要利用常青分发的优势。
  • 您不介意与 Microsoft 共享终端用户的数据。

以下情况选择 DotNetBrowser:

  • 您需要自定义功能。
  • 您希望在使用产品时获得帮助。
  • 您希望以保密方式报告问题并解决问题。
  • 您希望控制终端用户的数据收集。
  • 您需要在没有用户界面的情况下运行应用程序。
  • 您需要在 Linux 和 macOS 上运行。
  • 您需要通过编程方式打印。
Spinner

发送中。。。

抱歉,发送中断

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

阅读并同意条款以继续。

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

方法上的差异

WebView2 是微软提供的一个控件。它是免费的,但正如大家从微软产品中所期待的那样,它也是专有的。它是基于 Trident 的 WebView 的替代品,改用了 Edge。

WebView2 是一个控件:Visual Studio 工具箱中的一个项目,来自 Microsoft.Web.WebView2.Core.dll 文件的类。但它并不是像 Office 或 PowerBI 这样的微软产品。因此,您不会得到客户服务、技术支持或援助。

DotNetBrowser 是由专注于浏览器嵌入的公司 TeamDev 创建和开发的产品。我们从 2004 年开始使用 Internet Explorer,后来又继续使用 Safari 和 WebKit——最终在 2013 年稳定下来使用 Chromium。

2015 年, 我们推出了 DotNetBrowser。它是一个专为商业用途设计的商业产品。除了软件和文档外,我们的服务还包括专门的客户服务专员、 技术支持高级服务

商业差异

修复、功能和帮助

当您发现错误或需要新功能时,如何获得帮助?让我们来看看 WebView2 和 DotNetBrowser 分别提供哪些支持。

WebView2 通过一个专门的 GitHub 存储库收集公众的反馈。当您需要报告问题时,您可以在那里创建一个问题。如果微软开发人员认为您的报告有价值,他们会将其转移到内部系统进行处理。为了让您了解问题的处理状态,他们会使用“已跟踪”标签来标记这些问题。

微软开发人员对新报告的反应迅速,但他们处理问题的速度要慢得多。例如,在撰写本文时,几乎有 80% 的已跟踪问题在超过 6 个月的时间里仍未得到解决。

DotNetBrowser 设有专门的客户服务台系统,客户提交的报告会严格保密。我们保证的首次响应时间,或服务级别协议(SLA),为一个工作日。

技术支持包括: 产品使用帮助、故障排除协助、错误修复以及考虑功能请求。您的所有支持请求将由 DotNetBrowser 的软件工程师处理。

终端用户隐私

本文撰写于 2022 年 10 月,并描述了截至该日期的最终端用户许可协议(EULA)版本。

当终端用户在其环境中安装 WebView2 时,安装程序会向他们显示 EULA。其中有两点可能会引起您的关注:

  1. 微软可能会收集有关您终端用户的信息。
  2. 您需要明确告知终端用户关于这一点。

EULA 的第 3.a 节规定 WebView2 可能会收集有关您和您终端用户使用该软件的信息。然后这些信息会被发送到 Microsoft。

由于微软收集终端用户的信息,您必须展示相应的通知并获得他们的同意(EULA 的第 9 节)。

DotNetBrowser 不会收集有关您和您终端用户的信息。此外,它还可以防止 Google 收集数据。有关 DotNetBrowser 如何处理数据以及如何让您控制隐私的更多信息,请参阅 隐私惯例

通过个人助手评估 DotNetBrowser!
立即体验

技术差异

从技术角度来看,DotNetBrowser 和 WebView2 并没有太大的区别。两者都有类似的架构,其中 Chromium 在单独的进程中运行。两者都有数百个功能,其中大部分都是重叠的。

然而,差异确实存在。当选择适合您情况的解决方案时,这些差异可能是至关重要的。让我们来看看具体差别在哪儿。

分发与部署

您可以将 WebView2 Runtime 与您的应用程序一起使用,也可以使用安装在终端用户的应用程序。这些是分发模式:分别是固定版本和常青版本。

在固定版本模式下,您可以控制应用程序中 WebView2 的版本,这有利于稳定性。在常青版本模式下,您可以让 Microsoft 负责后勤和更新,并缩小软件的大小。

而 DotNetBrowser 则需要与您的应用程序一起打包。这是唯一直接支持的分发模式。

Chrome 扩展

支持 Chrome 扩展是 DotNetBrowser 和 WebView2 客户端中的一个普遍请求。

DotNetBrowser 支持 Chrome 扩展

在 WebView2 仓库中,对扩展的请求被标记为“已跟踪”,但目前尚未报告任何进展。

无界面运行

对于自动化或生成 PDF 报告等用例,无需用户界面。相反,无头运行更简单、更高效。

WebView2 不支持无界面运行,因为它需要应用程序窗口。

在 DotNetBrowser 中,无界面运行是开箱即用的。您可以在控制台应用程序、网络服务器甚至 Windows 服务中使用它。就像这样:

using (IEngine engine = EngineFactory.Create())
{
    using (IBrowser browser = engine.CreateBrowser())
    {
        browser.Navigation.LoadUrl("https://teamdev.com/dotnetbrowser").Wait();
    }
}

Linux 和 macOS

WebView2 宣布计划支持 macOS ,以后还将支持 Linux 。但他们尚未公布具体的时间表和预估。

DotNetBrowser 是一个跨平台库,可以在 Windows、macOS 和 Linux 上运行。您可以将其与 [Avalonia UI][quick-start-avalonia-ui] 一起使用,或 在服务器应用程序中使用它。

WPF 和重叠控件

将任何 WPF 控件放置在 WebView2 控件之上是不可能的。这是由 WPF 的自然限制和 WebView2 的工作方式导致的。

WPF 不支持在不同窗口中渲染的区域之间的重叠,而 WebView2 正是通过在 WPF 控件中嵌入一个外部窗口来工作的。

但对于 DotNetBrowser 来说,这并不是什么问题。 除了可以像 WebView2 一样使用本地窗口外,它还可以直接在 WPF 窗口内渲染。

这被称为离屏渲染模式。在这种模式下,渲染的像素被复制到 .NET 进程内存中,并在常规的 WPF 控件中显示。

从 .NET 调用 JavaScript

在两种解决方案中,您都可以直接从 .NET 代码中执行 JavaScript。不同之处在于当结果从 Chromium 传回到 .NET 世界时发生了什么。

WebView2 会将结果转换为 JSON:

string result = await coreWebView2.ExecuteScriptAsync(@"'example'");
Debug.Assert(result == "\"example\"");

DotNetBrowser 则自动 转换成简单的类型。对于复杂类型,它会用实际 V8 对象的代理进行替换:

string title = await browser.MainFrame.ExecuteJavaScript<string>("document.title");
IJsObject window = await browser.MainFrame.ExecuteJavaScript<IJsObject>("window");

// 或者,您也可以使用动态类型。
dynamic document = Browser.MainFrame.ExecuteJavaScript("document").Result;
document.write("Hello world!");

从 JavaScript 调用 .NET

两种解决方案都允许在 JavaScript 中使用 .NET 对象,但有一个问题。

在 WebView2 中,注入的对象应该是 COM 可见的,并实现 IDispatch 接口。这个要求限制了可以注入的内容范围,并增加了样板代码的数量。

在 DotNetBrowser 中,您可以 注入任何对象: 标准的 .NET 对象、集合,甚至 WPF 控件。在 JavaScript 中,您将能够访问注入对象的公共成员和索引属性。

拦截流量

WebView2 没有提供用于拦截、过滤或修改 HTTP 请求的 API。

而 DotNetBrowser 则提供了广泛的 HTTP 流量管理功能。使用这些功能,您可以实现以下操作:

您可以在我们的 GitHub上找到 DotNetBrowser 中网络功能的更多示例。

打印 API

WebView2 的打印 API 功能有限。它可以打印为 PDF,并允许您操作少量设置。不过,相当有限:

  • 您不能选择特定的系统打印机。
  • 您不能配置页面范围。
  • 您无法控制显示给用户的打印对话框。

DotNetBrowser 对打印过程提供了完全的控制。您可以:

  • 选择打印机。
  • 处理由 JavaScript 和 .NET 代码发起的打印。
  • 查看打印机的功能,以避免使用不受支持的功能。
  • 配置打印设置,包括页面范围、纸张大小、边距、页眉、页脚等。

免费试用

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