谈到嵌入式浏览器,业界提供了各种各样的解决方案:免费的和收费的,开源的和专有的。这些解决方案在功能、使用方式和附带服务等方面都各不相同。本文旨在帮助您做出正确的选择。
在上一篇文章中,我们拿开源的 CefSharp 与 DotNetBrowser 进行了比较,并给出了如何选择的建议。
今天,我们将研究专有的 WebView2,并进一步向您证明 DotNetBrowser 更适合商业用途。我们将先从组织和法律方面开始讨论,然后再探讨其功能差异。
简而言之
DotNetBrowser 和 WebView2 均来自在此领域拥有丰富经验的商业公司,是成熟的解决方案。因此,您获得的一定是一个功能正常且不依赖开源社区的软件解决方案。
以下情况选择 WebView2:
- 您必须使用免费软件。
- 您想要利用常青分发的优势。
- 您不介意与 Microsoft 共享终端用户的数据。
以下情况选择 DotNetBrowser:
- 您需要自定义功能。
- 您希望在使用产品时获得帮助。
- 您希望以保密方式报告问题并解决问题。
- 您希望控制终端用户的数据收集。
- 您需要在没有用户界面的情况下运行应用程序。
- 您需要在 Linux 和 macOS 上运行。
- 您需要通过编程方式打印。
发送中。。。
您的个人 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。其中有两点可能会引起您的关注:
- 微软可能会收集有关您终端用户的信息。
- 您需要明确告知终端用户关于这一点。
EULA 的第 3.a 节规定 WebView2 可能会收集有关您和您终端用户使用该软件的信息。然后这些信息会被发送到 Microsoft。
由于微软收集终端用户的信息,您必须展示相应的通知并获得他们的同意(EULA 的第 9 节)。
DotNetBrowser 不会收集有关您和您终端用户的信息。此外,它还可以防止 Google 收集数据。有关 DotNetBrowser 如何处理数据以及如何让您控制隐私的更多信息,请参阅隐私惯例。
技术差异
从技术角度来看,DotNetBrowser 和 WebView2 并没有太大的区别。两者都有类似的架构,其中 Chromium 在单独的进程中运行。两者都有数百个功能,其中大部分都是重叠的。
然而,差异确实存在。当选择适合您情况的解决方案时,这些差异可能是至关重要的。让我们来看看具体差别在哪儿。
分发与部署
您可以将 WebView2 Runtime 与您的应用程序一起使用,也可以使用安装在终端用户的应用程序。这些是分发模式:分别是固定版本和常青版本。
在固定版本模式下,您可以控制应用程序中 WebView2 的版本,这有利于稳定性。在常青版本模式下,您可以让 Microsoft 负责后勤和更新,并缩小软件的大小。
而 DotNetBrowser 则需要与您的应用程序一起打包。这是唯一直接支持的分发模式。
Chrome 扩展程序
DotNetBrowser 和 WebView2 都支持扩展程序。虽然 WebView2 提供了非常基础的功能,但 DotNetBrowser 为开发者提供了更多的选项,并且完全控制扩展程序的生命周期和活动。
在 WebView2 中,开发者可以从未打包的 CRX 文件中安装扩展程序,启用/禁用扩展程序,以及卸载它。
在 DotNetBrowser 中,开发者可以直接从 CRX 文件中安装扩展程序,程序化地“点击”扩展程序图标,与扩展程序可能打开的弹出窗口和新“标签页”进行交互。
此外,您还可以让用户直接与扩展进行交互:
- 启用使用 Chrome 应用商店。
- 显示带有徽章和标签的扩展程序图标。
- 显示扩展程序创建的弹出窗口和“标签页”。
无 UI 运行
对于自动化或生成 PDF 报告等用例,无需用户界面。相反,无头运行更简单、更高效。
WebView2 不支持无 UI 运行,因为它需要应用程序窗口。
在 DotNetBrowser 中,无界面运行是开箱即用的。您可以在控制台应用程序、网络服务器甚至 Windows 服务中使用它。就像这样:
using (IEngine engine = EngineFactory.Create())
{
using (IBrowser browser = engine.CreateBrowser())
{
browser.Navigation.LoadUrl("https://teamdev.com/dotnetbrowser").Wait();
}
}
Linux 和 macOS
2024 年,微软正式拒绝了在 WebView2 中支持 macOS 和 Linux 的计划。
DotNetBrowser 是一个跨平台库,可以在 Windows、macOS 和 Linux 上运行。您可以将其与 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 流量管理功能。使用这些功能,您可以实现以下操作:
- 过滤 HTTP 请求。
- 重定向 HTTP 请求。
- 重写 HTTP 请求和响应标头。
- 重写请求上传数据。
- 过滤 Cookie。
您可以在我们的 GitHub上找到 DotNetBrowser 中网络功能的更多示例。
Printing API
WebView2 的 Printing API 功能有限。它可以打印为 PDF,并允许您操作少量设置。不过,相当有限:
- 您不能选择特定的系统打印机。
- 您不能配置页面范围。
- 您无法控制显示给用户的打印对话框。
DotNetBrowser 对打印过程提供了完全的控制。您可以:
- 选择打印机。
- 处理由 JavaScript 和 .NET 代码发起的打印。
- 查看打印机的功能,以避免使用不受支持的功能。
- 配置打印设置,包括页面范围、纸张大小、边距、页眉、页脚等。
免费试用
点击此处获取免费许可证,并根据您的需求,选择以下适合您的入门指南。只需 5 分钟,即可开启您的 DotNetBrowser 体验之旅:
- DotNetBrowser 在 WPF 的应用
- DotNetBrowser 在 Avalonia 的应用
- DotNetBrowser 在 WinForms 的应用
- DotNetBrowser 在控制台中的应用, 适用于 Windows 服务和服务器应用程序。