当您需要在 SWT 应用程序中显示 Web 内容时,通常有两种选择:内置的Browser小部件,或像 Fuzio 这样的商业方案。
本文将详细解析这两种方案的差异,帮助您根据自身需求做出合适的选择。我们将从架构、底层引擎、跨平台一致性、对最新 Web 标准的支持,以及对信创平台的适配等维度进行比较。
概览
| SWT Browser | Fuzio | |
|---|---|---|
| 授权类型 | 开源 | 商业授权 |
| 使用的 Web engine | 不固定,由操作系统提供 | Chromium 147(捆绑内置) |
| API 规模 | 8 个接口, 11 个类 | 60+ 个包,580+ 个类与接口 |
| 跨平台引擎一致性 | 否(每个 OS 不同) | 是(所有平台一致) |
| 支持的 UI 工具包 | SWT | Swing、JavaFX、SWT、Compose Desktop |
| 编程语言 | Java | Java、Kotlin |
| Java 进程内存隔离 | 不支持 | 支持 |
| 技术支持 | 不提供 | 提供保密支持 ,含 SLA |
内置的Browser是一个简单但功能可靠的小部件,它使用操作系统提供的浏览器引擎。当您处于以下情形时可以选择Browser:
- 您必须使用免费方案。
- 仅需展示简单的网页,不涉及复杂的浏览器功能且使用场景非关键。
- 不需要跨平台一致的渲染表现。
Fuzio 是一款基于 Chromium 的高级商业网页视图控件。在以下情况下可选择 Fuzio:
- 使用场景复杂或对核心关键业务。
- 需要控制浏览器引擎的版本。
- 需要在不同平台上使用一致的浏览器引擎。
- 需要自动化测试 SWT 中的网页内容。
- 需要使用某些高级功能。
- 需要适配国产信创平台。
- 需要技术支持、bug 修复或定制功能。
嵌入
由于Browser小部件是 SWT 的一部分,因此将其嵌入到应用程序中非常容易:
varbrowser=newBrowser(shell,SWT.NONE);browser.setUrl("https://example.com");使用 Fuzio 时,您需要先将依赖项添加到项目中。根据您的构建系统,您可以使用 Gradle 或 Maven 构件、将 JAR 文件添加到类路径,或者创建一个独立的 Eclipse 插件。
添加完库之后,嵌入代码如下:
varengine=Engine.newInstance(HARDWARE_ACCELERATED);varbrowser=engine.newBrowser();varbrowserView=BrowserView.newInstance(shell,browser);browser.navigation().loadUrl("https://example.com");Fuzio 多了一个Engine的初始化步骤,但这正是其多进程架构的体现。
浏览器引擎
Standard Widget Toolkit(标准小部件工具包,简称 SWT)的初衷是提供符合操作系统原生体验的用户界面。为了实现这一目标,SWT 使用操作系统提供的小部件,而不是像其他工具包那样创建自己的一套小部件。
因此,SWT 中的每个小部件都是对原生对应部件的封装。该工具包提供了使用小部件的 API,但小部件的渲染、可访问性、焦点管理以及其他功能则由操作系统处理。Browser小部件也是以这种方式工作的。
Browser是对操作系统提供的网页视图控件的简单封装:
| 操作系统 | 底层引擎 |
|---|---|
| Windows | WebView2(基于 Microsoft Edge) |
| macOS | WKWebView(基于 WebKit) |
| Linux | WebKitGTK(基于 WebKit) |
相比之下,Fuzio 配备了基于 Chromium 的内置浏览器引擎,最新版本 Fuzio 2026.1.0 内置 Chromium 147。其设计理念是确保无论操作系统和已安装软件如何,浏览器行为都能保持一致。
开发与测试成本
过去,不同浏览器对同一个网站的渲染方式常常有所不同。来自不同厂商的浏览器支持各自的 HTML、CSS,甚至 JavaScript 子集。这种令人头疼的不兼容性导致了巨大的开发和测试成本,也成为了问题的根源。
Internet Explorer 如今早已退出历史舞台,值得庆幸。但是,不兼容的问题也随着它的消失而解决了吗?很遗憾,并没有。浏览器仍会因对代码的执行和样式的渲染方式各异,给开发者带来困扰。
SWT 方法就容易受到这种问题的困扰。在实际应用中,一个跨平台的 SWT 应用程序不仅要面对 Edge 和两种不同版本的 WebKit,还要面对它们的众多版本。结论很清楚:存在的浏览器运行时越多,所需的开发和测试工作就越多。
Fuzio 提供了内置的浏览器引擎。通过这种方式,开发者能够确切知晓应用程序所使用的 Chromium 版本。该版本在所有操作系统上保持一致,只有在 Fuzio 升级时才会改变。
测试矩阵的对比一目了然:
| SWT Browser | Fuzio | |
|---|---|---|
| Windows 测试目标 | 多个 WebView2 / Edge 版本 | 单一 Chromium |
| macOS 测试目标 | 多个 WKWebView 版本 | 单一 Chromium |
| Linux 测试目标 | 多个 WebKitGTK 版本 | 单一 Chromium |
安全性与更新
许多公司都要求浏览器引擎保持最新状态。这是一项合理的安全要求。仅在 2025 年,Chromium 就修复了 179 多个漏洞,其中六个漏洞已知存在可利用的攻击手段。
SWT 使用系统浏览器的方式在企业管理网络中运行良好,在这种网络中,可通过域策略强制进行及时更新。
Fuzio 让开发者可以控制浏览器的版本。通过这种方式,应用程序能够确保符合公司的安全策略,而无需依赖运行环境。在未受管理的网络或个人计算机中,只要应用程序能够适时升级,这种方式同样适用。
Fuzio 大约每月发布一个新版本,并同步升级 Chromium。我们会在 Chromium 官方发布稳定版本后的 3–4 周内完成升级,确保集成最新的安全补丁和漏洞修复。每个版本都包含修复和功能改进。
功能
内置的Browser是一个功能强大的小部件,但其功能受限于自身的架构。使用不同的浏览器引擎会限制 API,使其仅包含WebView2、WKWebView和WebKitGTK之间兼容的功能。
Browser支持以下操作:
- 加载网站及本地 HTML 文件
- 管理 cookies
- 管理弹出窗口
- 执行基本授权操作
- 在 Java 和 JavaScript 之间相互调用
- 监听页面位置或标题更改的事件
Fuzio 底层使用 Chromium,这使得它更易于支持更广泛的功能。除了常规的浏览功能外,它还提供了 Chromium 特有的功能。以下列表并不完整,但展示了一些关键功能,帮助您了解 Fuzio 的能力:
- Chrome 扩展程序安装与管理
- 截图与 HTML 转 Bitmap
- 打印
- 表单自动填充
- 自定义协议
- 控制 HTTP 流量与拦截网络请求
- 高级身份验证(包括 NTLM、SSL 客户端证书、SuisseID、U2F、集成 Windows 身份验证和 Kerberos)
- 4K 60FPS GPU 渲染
- WebRTC 与屏幕共享
- 启用 H.264 / HEVC / AAC 等专有编解码器
- 以及更多功能
对浏览器的控制
创建一个 SWT 浏览器只需要一行简单的代码:new Browser(...)。但是,这行简单的代码隐藏了实际技术的复杂性。底层的浏览器是非常复杂的项目,它们有不同的进程模型、安全特性,以及各自嵌入到 SWT 这样的平台的方式。
当需求简单时,我们希望这种复杂性被隐藏起来。然而,当情况变得复杂,对浏览器进行更深入的控制可能就变得必要了。Fuzio API 提供的概念层级结构赋予您这种控制权:
各层级的职责:
Engine—— 启动 Chromium 主进程。如果您需要五个主进程,那就创建五个Engine实例。在一个 Engine 内创建的对象与其他 Engine 在物理上是隔离的。Profile—— 在每个引擎中,您拥有一个或多个 Profile。这些是Chromium 的配置文件,允许将所有的浏览器数据和设置分开保存。您可以在配置文件级别管理缓存、代理、网络、下载、权限以及其他功能。Browser—— 在一个 Profile 中,您可以创建多个 Browser 实例。可以将其视为 Chromium 中的标签页。这些是实际的浏览器,您可以通过它们执行导航、分发鼠标和键盘事件、截图、打开 DevTools 以及执行其他操作。即使浏览器对用户不可见,它也能完全正常运行,因为默认情况下渲染是在内存中完成的。要显示浏览器,请使用 BrowserView。Frame—— 一个浏览器中可以包含多个 Frame 实例,代表页面上的实际框架,允许您操作 JavaScript 和 DOM。
这种分层模型让您可以从一个简单的 demo 开始,逐步增加复杂度,而不需要重写整个集成。
开发者工具
SWT 的BrowserAPI 本身不支持开发者工具。在 Windows 和 macOS 上,您可以通过外部手段连接到 Microsoft Edge 或 Safari 的 DevTools 实例,但流程繁琐;Linux 平台上目前没有可用的开发者工具方案。
Fuzio 提供了一个统一的 API,可用于在所有支持的操作系统上打开 Chromium 的 DevTools。您还可以为任何 JavaScript 库安装开发者工具扩展(例如 React DevTools、Vue DevTools),获得与 Google Chrome 一样的原生开发体验。
自动化测试
目前,SWTBrowser中加载的网页内容无法进行自动化测试。
Fuzio 与支持 Chromium DevTools 协议的自动化测试框架兼容,例如 Selenium、Puppeteer 或 Playwright。
信创平台支持
在信创平台上,SWT Browser 的能力受到两个相互独立因素的限制。首先,Eclipse Platform Project 并未针对龙芯(LoongArch)等架构发布官方 SWT 二进制包;可用的构件主要依赖社区移植版本,而这些版本的发布节奏通常较慢。
其次,由于 SWT Browser 通过系统提供的 WebKitGTK 进行渲染,因此其对现代 Web 标准的支持程度实际上取决于所使用的 Linux 发行版。
Fuzio 则把 Chromium 147 直接打包进发行物,在信创平台上与在主流 Linux/Windows/macOS 上渲染同一份 Chromium。
| 信创平台 | 支持架构 |
|---|---|
| 银河麒麟 Kylin | x64 / ARM64 |
| 开放麒麟 openKylin | x64 / ARM64 |
| Loongnix | x64 / ARM64 / LoongArch64 |
Fuzio 提供fuzio-linux64-loong专用构件,一行依赖即可支持龙芯架构:
dependencies{implementation("tech.fuzio:fuzio-linux64-loong:${fuzioVersion}")}对于政府、金融、能源等需要信创合规的行业,Fuzio 是目前国内唯一开箱即用的 Java 嵌入式 Chromium 方案。
支持与协助
由于 SWT 是一个开源项目,您始终可以依靠社区的支持。如果您发现了一个错误或有不错的功能建议,可以在 GitHub 上分享您的发现,并自由为其贡献。但是,社区的响应速度和优先级与商业支持有显著差异,对于核心业务系统这种不确定性可能难以接受。
Fuzio 是一款由即库科技(Jiku Technology)开发和提供技术支持的商业产品。当您联系我们的技术支持团队时,您将直接与负责该产品开发的工程师进行沟通。
| SWT Browser | Fuzio | |
|---|---|---|
| 支持语言 | 英文社区 | 中文 / 英文 |
| 沟通渠道 | GitHub | 工单系统 / 微信直接对接工程师 |
| 响应时区 | 无保障 | 中国时区(UTC+8) |
| SLA | 无 | 一个工作日内响应 |
我们的技术支持服务涵盖:
- 产品使用指导
- 故障排查协助
- bug 修复
- 功能建议评估与反馈
总结
| 场景 | 推荐方案 |
|---|---|
| 仅需显示简单网页,无需高级浏览器功能 | SWT Browser |
| 项目对成本极度敏感、必须使用免费方案 | SWT Browser |
| 商业软件,对稳定性和崩溃隔离有要求 | Fuzio |
| 需要跨平台一致的浏览器引擎与渲染表现 | Fuzio |
| 需要 DevTools | Fuzio |
| 需要对 SWT 中的网页内容做自动化测试 | Fuzio |
| 需要适配信创平台(麒麟 / LoongArch) | Fuzio |
| 同时使用 Swing、JavaFX 或 Compose Desktop | Fuzio |
| 需要中文技术支持和 SLA | Fuzio |
| 需要 Chrome 扩展、网络拦截、自定义协议等 | Fuzio |
参考链接
- Website:https://fuzio.tech
- 文档:https://fuzio.tech/docs/quickstart/
- 免费试用:https://fuzio.tech/#try-for-free
- 示例:https://gitee.com/jiku-technology-dev/fuzio-examples