当您需要在 SWT 应用程序中显示网页内容时,通常有两种选择:内置的 Browser 小部件或像 JxBrowser 这样的商业选项。

本文将详细剖析两者之间的差异,帮助您根据自身需求做出正确选择。

简而言之 

内置的 Browser 是一个简单但功能可靠的小部件,它使用操作系统提供的浏览器引擎。当以下情况时选择 Browser

  • 您需要使用免费软件。
  • 使用场景简单且非关键。

JxBrowser 是一款基于 Chromium 的高级商业网页视图控件。在以下情况下可选择 JxBrowser:

  • 使用场景复杂或关键。
  • 需要控制浏览器引擎的版本。
  • 需要在不同平台上使用一致的浏览器引擎。
  • 需要自动测试 SWT 中的网页内容。
  • 需要使用某些高级功能。
  • 需要技术支持、错误修复或定制功能。

嵌入 

由于 Browser 小部件是 SWT 的一部分,因此将其嵌入到应用程序中非常容易:

var browser = new Browser(shell, SWT.NONE);
browser.setUrl("https://example.com");

使用 JxBrowser 时,您需要先将依赖项添加到项目中。根据您的构建系统,您可以使用 Maven 构件,将 JAR 文件添加到类路径,或者创建一个独立的 Eclipse 插件

添加完库之后,嵌入代码如下:

var engine = Engine.newInstance(HARDWARE_ACCELERATED);
var browser = engine.newBrowser();
var browserView = BrowserView.newInstance(shell, browser);
browser.navigation().loadUrl("https://example.com");

浏览器引擎 

Standard Widget Toolkit(标准小部件工具包,简称 SWT)的初衷是提供符合操作系统原生感觉的用户体验。为了实现这一目标,SWT 使用操作系统提供的小部件,而不是像其他工具包那样创建自己的一套小部件。

因此,SWT 中的每个小部件都是对原生对应部件的封装。该工具包为您提供了使用小部件的 API,但小部件的渲染、可访问性、焦点管理以及其他功能则由操作系统处理。Browser 小部件也是以这种方式工作的。

Browser 是对操作系统提供的网页视图控件的简单封装。在 Windows 上,这是基于 Microsoft Edge 的 WebView2。在 macOS 和 Linux 上,分别是 WKWebViewWebKitGTK,两者都使用 WebKit。

相比之下,JxBrowser 配备了基于 Chromium 的内置浏览器引擎。其设计理念是确保无论操作系统和已安装软件如何,浏览器行为都能保持一致。

浏览器引擎:操作系统提供 vs 捆绑内置。

浏览器引擎:操作系统提供 vs 捆绑内置。

开发成本 

过去,不同浏览器对同一个网站的渲染方式常常有所不同。来自不同厂商的浏览器支持各自的 HTML、CSS,甚至 JavaScript 子集。这种令人头疼的不兼容性导致了巨大的开发和测试成本,也成为了问题的根源。

Internet Explorer 如今早已退出历史舞台,值得庆幸。但是,不兼容的问题也随着它的消失而解决了吗?很遗憾,并没有。浏览器仍会因对代码的执行和样式的渲染方式各异,给开发者带来困扰。

SWT 方法就容易受到这种问题的困扰。在实际应用中,一个跨平台的 SWT 应用程序不仅要面对 Edge 和两种不同版本的 WebKit,还要面对它们的众多版本。有一点很清楚:存在的浏览器运行时越多,所需的开发和测试工作就越多。

JxBrowser 提供了内置的浏览器引擎。通过这种方式,开发人者能够确切知晓应用程序所使用的 Chromium 版本。该版本在所有操作系统上保持一致,只有在 JxBrowser 升级时才会改变。

SWT 浏览器与 JxBrowser 所需工作量的对比

浏览器越少,开发和测试所需的工作量就越少。

安全性与更新 

许多公司都要求浏览器引擎保持最新状态。这是一项安全要求,而且是合理的要求。仅在今年,Chromium 就修复了 179 多个漏洞,其中六个漏洞已知存在可利用的攻击手段。

SWT 使用系统浏览器的方式在企业管理网络中运行良好,在这种网络中,可通过域策略强制进行及时更新。

JxBrowser 使开发者可以控制浏览器的版本。通过这种方式,应用程序能够确保符合公司的安全策略,而无需依赖运行环境。在未受管理的网络或个人计算机中,只要应用程序能够适时升级,这种方式也非常适用。

在 2024 年,JxBrowser 发布了 15 个带有 Chromium 升级的版本。最新版本 JxBrowser 8.2.2 使用的是 Chromium 132。

功能 

内置的 Browser 是一个功能强大的小部件,但其功能受限于自身的架构。使用不同的浏览器引擎会限制 API,使其仅包含 WebView2WKWebViewWebKitGTK 之间兼容的功能。

Browser 支持以下操作:

  • 加载网站及本地 HTML 文件;
  • 管理 cookies;
  • 管理弹出窗口;
  • 执行基本授权操作;
  • 在 Java 和 JavaScript 之间相互调用;
  • 监听页面位置或标题更改的事件。

SWT 浏览器与 JxBrowser 的 API 规模对比

内置浏览器与 JxBrowser 的 API 界面。

JxBrowser 底层使用 Chromium,这使得它更易于支持更广泛的功能。除了常规的浏览功能外,它还提供了 Chromium 特有的功能。以下列表并不完整,但展示了一些关键功能,帮助您了解 JxBrowser 的能力:

  • Chrome 扩展程序。
  • 截图功能。
  • 打印支持。
  • 表单自动填充。
  • 自定义协议。
  • 控制 HTTP 流量。
  • 高级身份验证(包括 NTLM、SSL 客户端证书、SuisseID、U2F、集成 Windows 身份验证和 Kerberos)。
  • 以及更多功能

对浏览器的控制 

创建一个 SWT 浏览器只需要一行简单的代码:new Browser(...)。但是,这行简单的代码隐藏了实际技术的复杂性。底层的浏览器是非常复杂的项目,它们有不同的进程模型、安全特性,以及各自嵌入像 SWT 这样其他平台的方式。

当需求简单时,我们希望这种复杂性被隐藏起来。然而,当情况变得复杂,对浏览器进行更深入的控制可能就变得必要了。JxBrowser API 提供的概念层级结构赋予您这种控制权。

JxBrowser 的架构图

JxBrowser 的架构。

您可以通过创建一个 Engine 来启动 Chromium 的主进程。如果您需要五个主进程,那就创建五个 Engine 实例。在一个引擎内创建的对象与其他引擎在物理上是隔离的。

在每个引擎中,您拥有一个或多个 Profile。这些是 Chromium 的配置文件,它们允许将所有的浏览器数据和设置分开保存。您可以在配置文件级别管理缓存、代理、网络、下载、权限以及其他功能

在一个 Profile 中,您可以创建多个 Browser 实例——可以将它们视为 Chromium 中的标签页。这些是实际的浏览器,您可以通过它们执行导航、分发鼠标和键盘事件、截图、打开开发者工具以及执行其他操作。即使浏览器对用户不可见,它也能完全正常运行,因为默认情况下渲染是在内存中完成的。要显示浏览器,请使用 BrowserView

最后,一个浏览器中可以包含多个 Frame 实例。它们代表页面上的实际框架,允许您操作 JavaScript 和 DOM。

开发者工具 

SWT 的 Browser API 本身不支持开发者工具,但您可以将其连接到 Microsoft Edge 或 Safari 的开发者工具实例。目前,Linux 平台上尚不支持开发者工具。

JxBrowser 提供了一个 API,可用于打开 Chromium 的 DevTools,并支持所有操作系统。您还可以为任何 JavaScript 库安装开发者工具扩展,并享受与 Google Chrome 一样的原生开发体验。

带有 React 扩展的 DevTools 截图

JxBrowser 中带有 React 扩展的 DevTools。

自动化测试 

目前,SWT Browser 中加载的网页内容无法进行自动化测试。

JxBrowser 与支持 Chromium DevTools 协议的自动化测试框架兼容,例如 Selenium、Puppeteer 或 Playwright。

支持与协助 

由于 SWT 是一个开源项目,您始终可以依靠社区的支持。如果您发现了一个错误或有不错的功能建议,可以在 GitHub 上分享您的发现,并自由为其贡献

JxBrowser 是一款商业产品,专为对第三方软件和供应商有严格要求和时间期限的公司而打造。我们提供私人帮助台系统,客户报告将保密。保证的首次响应时间(或 SLA)为一个工作日

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

Spinner

发送中。。。

抱歉,发送中断

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

阅读并同意条款以继续。

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