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

本文将详细解析这两种方案的差异,帮助您根据自身需求做出合适的选择。

欢迎查阅我们的详细迁移指南,其中涵盖了 SWT Browser 全部 API 的对应关系。

概览 

SWT Browser JxBrowser
授权类型开源商业授权
API 范围8 个接口,
11 个类
373 个接口,
126 个类
使用的 Web engine不固定,由操作系统提供Chromium 137
支持的 UI 工具包SWTSWT、Swing、JavaFX、Compose Desktop
编程语言JavaJava、Kotlin
技术支持不提供提供保密支持,含服务等级协议(SLA)

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

JxBrowser 平均每年发布 15 到 20 个版本,并同步升级 Chromium。最新版本 JxBrowser 8.8.0 内置了 Chromium 137。

功能 

内置的 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)承诺的首次响应时间为一个工作日内

我们的技术支持服务涵盖:

  • 产品使用指导
  • 故障排查协助
  • bug 修复
  • 功能建议评估与反馈

所有支持请求将由 JxBrowser 的软件工程师直接处理,确保高效、专业的服务体验。

Spinner

发送中。。。

抱歉,发送中断

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

阅读并同意条款以继续。

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