< 返回博客

JxBrowser 或 JavaFX WebView

Vladimir Ikryanov

2021 年 12 月 3 日

JxBrowser 和 JavaFX WebView 都允许您将 Web 技术引入跨平台 Java 桌面应用程序,以充分利用两个世界:Web 平台的普遍性和 Java 平台的强大功能。

在选择 JxBrowser 之前,我们的客户有时会问我们 JxBrowser 和 JavaFX WebView 之间的区别。 在本文中,我们将从架构、渲染以及对最新 Web 标准(包括 HTML5、CSS3、JavaScript 等)的支持方面对这些解决方案进行比较。

简而言之

如果您使用 JavaFX 开发软件,并且需要显示一个简单的网页,而不需要使用 HTML5 功能或高级 Web 浏览器功能,那么 JavaFX WebView 将非常适合这种情况。

对于 JavaFX、Swing 或 SWT 上的时间敏感型商业软件开发,稳定性、及时支持和有效沟通是必须的,JxBrowser 是最可靠的选择。

安装

JavaFX WebView 是在 JavaFX 2.0 中引入的,JavaFX 2.0 于 2014 年成为 JDK 8 的一部分。如果您使用 Java 8,那么您不需要执行任何特殊操作即可开始使用 JavaFX WebView。 对于 JDK 11 及更高版本,JavaFX 不再捆绑,因此要使用 JavaFX 11 或更高版本进行开发,您必须单独下载它。

JxBrowser 是一个第三方库,您需要将其作为依赖项添加到项目中。 您可以简单地下载并将其添加到您的应用程序类路径中,或者快速将其添加到您的 Gradle 或 Maven 项目中。

为个人和企业提供 30 天免费试用

引擎

JavaFX WebView 在内部使用 WebKit。 JxBrowser 使用功能齐全的 Chromium 底层。 这两种解决方案都包含所有必要的引擎二进制文件,并且不需要最终用户安装 Chromium 或 Safari。

渲染

WebKit 不渲染网页,因此 JavaFX 开发人员必须实现一个单独的轻量级(离屏)渲染器。 JavaFX 17 WebView 可以很好地渲染网页,因此与 Safari、Mozilla Firefox 或 Google Chrome 相比不会有任何明显差异。

在 JxBrowser 中,网页由 Chromium 使用 GPU 渲染。 所以它们看起来和 Google Chrome 中的一模一样。 JxBrowser支持两种渲染模式:离屏和硬件加速。

架构

JavaFX 在您的 Java 进程中初始化并运行 WebKit。 这种方法的优点是,与必须首先启动外部 Chromium 进程的 JxBrowser 相比,JavaFX 允许您非常快速地创建和显示 WebView。 然而,为了获得这样的速度,WebKit 会分配并使用 Java 进程的内存和 CPU。 某些现代网页可能会分配超过 1GB 的 RAM。 您创建和加载网页的 WebView 实例越多,Java 应用程序占用的 RAM 就越多。

JavaFX WebView 架构

JxBrowser 在单独的本机进程中运行 Chromium,并通过进程间通信 (IPC) 桥与其进行通信。 通过此解决方案,Chromium 不会影响 Java 应用程序的内存使用。 此外,JxBrowser支持Chromium多进程架构。 如果网页或 JavaScript 由于某种原因崩溃,Chromium 将继续工作,您甚至可以恢复崩溃的网页。

Jx浏览器架构

安全

WebKit 是使用 C++ 编写的。 为了调用 WebKit 功能,JavaFX WebView 使用 JNI。 由于 WebKit 在 JVM 内运行,任何错误或意外行为都可能导致 JVM 崩溃并意外终止您的 Java 应用程序。 最终用户的数据可能会丢失或损坏。

如果 Chromium 出现错误,您的 Java 程序将继续运行。 JxBrowser 甚至提供了一个 API 来通知您 Chromium 意外终止或 Chromium 进程崩溃,以便您可以重新初始化和恢复用户会话以获得更好的用户体验。

网络标准

如果您在 JavaFX 21 WebView 和 JxBrowser 7.38.0 (Chromium 122) 中加载 https://html5test.teamdev.com/,您将得到以下结果:

不同的 JavaFX 版本支持不同的 Web 标准。 例如,JavaFX 8 根本不播放 YouTube 上的视频:

并用一些工件渲染谷歌:

JavaFX 17 可以很好地完成相同的任务:

JavaFX 不支持 WebGL。

JavaFX WebView 和 JxBrowser 中的 WebGL 支持

即使在 JavaFX 17 中,Google 地图也无法正确显示:

支持的 UI 工具包

JavaFX WebView 可以无缝地用于 JavaFX 应用程序。 如果您使用 Java Swing 或 SWT 开发应用程序,则可以通过 JFXPanel 和 FXCanvas 嵌入 JavaFX WebView。

JxBrowser 支持所有 Java UI 工具包,包括 JavaFX、Swing 和 SWT。 它提供了以下用于嵌入的组件:

嵌入

编写一个带有地址栏和呈现当前加载网页的 Web 视图的简单 JavaFX 应用程序所需的工作非常相似。

JavaFX WebView

JxBrowser

API 和功能

JavaFX WebView API:~1 个包,~10 个类和接口。 JavaFX WebView 代表一个简单的 Web 浏览器控件。 没有目标提供全功能 Web 浏览器的功能,例如网络、SSL、身份验证、cookie、DevTools、插件、PDF 查看器等。

API 提供基本的 Web 浏览器功能,允许加载网页、获取各种加载事件、访问和修改 DOM、执行 JavaScript、通过将 Java 对象注入 JavaScript 来从 JavaScript 调用 Java、处理弹出窗口以及显示 JavaScript 对话框,例如警报、 确认,提示。

JxBrowser API:约 60 个包、约 580 个类和接口。 JxBrowser 包装并使用功能齐全的 Web 浏览器应用程序底层。

该 API 提供对数百种 Chromium 功能的访问,例如管理配置文件,包括隐身、插件、代理、cookie、拼写检查、下载、权限、身份验证(代理、基本、摘要、NTLM、SSL 客户端证书、SuisseID、U2F、集成 Windows 身份验证和 Kerberos)、密码、缩放、打印、DevTools、网络、自定义协议等。

支持和更新

JavaFX 是一个开源项目。 如果您发现错误或缺少功能,您可以做出贡献。 JavaFX 遵循 OpenJDK 6 个月的发布周期。 每 6 个月发布一个新版本。 目前尚不清楚 WebKit 引擎多久会升级到最新的稳定版本,该版本支持最新的 Web 标准并包含已报告的安全漏洞的修复。

JxBrowser是一款商业产品,专为对集成第三方解决方案的质量和支持有很高要求的商业公司而设计和创建,并使用Java技术开发软件。 JxBrowser 自 2007 年以来一直由 TeamDev 开发和支持。

所有拥有有效标准支持订阅的客户都可以免费使用所有新的 JxBrowser 版本,并直接获得 JxBrowser 工程师的技术支持。 如果您发现错误或缺少功能,我们将应用修复程序,实现所需的功能,并在合理的时间内为您提供新版本的库。

几乎每个月都会发布新版本的 JxBrowser。 我们会在 Chromium 正式发布后 3-4 周内将其升级到最新的稳定版本(带有最新的安全补丁和修复的漏洞)。





   |    备案号:京ICP备09015132号-1044