还在为 JCEF 自行构建发愁?Java 嵌入 Chromium 还有更省心的选择

发布时间:2026/7/23 20:21:17

还在为 JCEF 自行构建发愁?Java 嵌入 Chromium 还有更省心的选择 当寻找能够在 Java 中显示 HTML、执行 JavaScript 或使用 OAuth2 协议的解决方案时我们通常会考虑一个功能完备的嵌入式浏览器。如果您决定使用 Chromium 内核那么您可以选择 Fuzio 或 Java Chromium Embedded FrameworkJCEF来实现集成。我们收集了最常见的对比要点并为您整理了本指南。为了帮助您在这两个库之间做出选择我们将对它们的架构、功能覆盖、对信创平台的支持以及所需的集成工作量进行比较。概览JCEFFuzio授权类型开源商业底层引擎Chromium基于 CEFChromium自研集成API 规模47 个接口60 个类60 个包580 个类与接口支持的 UI 工具包SwingSwing、JavaFX、SWT、Compose Desktop编程语言JavaJava、KotlinJava 进程内存隔离不支持支持信创平台不支持原生支持麒麟 / LoongArch每年发布次数无官方版本发布持续更新约每月一次技术支持不提供提供中文技术支持含 SLAJCEF 是一款开源且免费的工具对于开源、低预算或学术项目来说它可能是一个可行的方案。但是JCEF 仍然需要可观的维护成本。您的开发团队需要投入额外的时间和专业知识来处理 JCEF 社区未涵盖的部分维护不同平台的构建基础设施。定期构建和打包 JCEF 的新版本。在 macOS 和 Windows 上对二进制文件进行公证和签名。修复问题并实现新功能。相比之下Fuzio 无需任何维护工作。您可以在 5 分钟内开始使用。该库提供了更多功能并对所有 UI 工具包提供了原生支持。如果您缺少某个功能、发现了问题或有任何疑问您可以随时寻求我们的帮助。入门JCEF 是基于 Chromium Embedded FrameworkCEF构建的开源库允许您将网页浏览器嵌入到 Java Swing 桌面应用程序中。要开始使用 JCEF您需要自行构建它。该过程包含三个步骤配置环境。编译二进制文件和 Java 类。将所有内容打包为 JAR 文件并添加到您的应用程序中。Fuzio 是一款商业库。要开始使用 Fuzio只需将依赖添加到您的 Gradle 或 Maven 项目中即可。或者您也可以下载该库并将 Fuzio 添加到类路径中。Fuzio的 JAR 文件包含了所有必要的二进制文件因此开发者无需执行任何额外操作。其中 macOS 的二进制文件已经过苹果公司的公证Windows 的二进制文件也已经过签名。内部结构JCEF 和 Fuzio 都是基于 Chromium 内核构建的。JCEF 基于 CEF 构建——CEF 是一个知名的 C 框架同时也为其他编程语言提供绑定支持。Fuzio 则采用内部自研方案来实现 Chromium 的集成不基于 CEF。支持的 UI 工具包JCEF 提供了一个 Swing 组件。如果您使用 JavaFX 或 SWT 开发应用程序则需借助集成桥来实现连接。具体而言JavaFX 可利用 SwingNode而 SWT 则可通过 SWT_AWT 桥接器来实现。Fuzio 为所有主流 UI 工具包提供了原生组件UI 工具包组件Swingtech.fuzio.view.swing.BrowserViewJavaFXtech.fuzio.view.javafx.BrowserViewCompose Desktoptech.fuzio.view.compose.BrowserViewSWTtech.fuzio.view.swt.BrowserView您可以在快速入门指南中了解如何使用任何工具包创建简单的应用程序。我们的客户还将 Fuzio 应用于 Eclipse RCP、IntelliJ IDEA 和 NetBeans 插件中。桌面嵌入编写一个简单的桌面应用程序对于这两个库来说所需的工作量是相似的。以下是一个简单的示例JCEFpublicstaticvoidmain(String[]args){if(!CefApp.startup(args)){System.out.println(Startup initialization failed!);return;}varoffscreenfalse;varsettingsnewCefSettings();settings.windowless_rendering_enabledfalse;varcefAppCefApp.getInstance(settings);varclientcefApp.createClient();client.addMessageRouter(CefMessageRouter.create());varurlhttps://fuzio.tech/;vartransparentfalse;varbrowserclient.createBrowser(url,offscreen,transparent);varframenewJFrame(JCEF);frame.add(browser.getUIComponent(),BorderLayout.CENTER);frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);frame.setSize(1280,900);frame.setVisible(true);}Fuziopublicstaticvoidmain(String[]args){varengineEngine.newInstance(HARDWARE_ACCELERATED);varbrowserengine.newBrowser();browser.navigation().loadUrl(https://fuzio.tech/);SwingUtilities.invokeLater(()-{varviewBrowserView.newInstance(browser);varframenewJFrame(Fuzio);frame.add(view,BorderLayout.CENTER);frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);frame.setSize(1280,900);frame.setVisible(true);frame.addWindowListener(newWindowAdapter(){OverridepublicvoidwindowClosing(WindowEvente){engine.close();}});});}无头模式嵌入如果您的应用程序在没有 UI 的情况下运行那么 JCEF 并不适合您。JCEF 需要一个可见的 Swing UI否则浏览器将无法完全初始化。而使用 Fuzio您可以创建一个功能完备的浏览器并真正实现离屏渲染publicstaticvoidmain(String[]args){try(varengineEngine.newInstance(OFF_SCREEN)){varbrowserengine.newBrowser();browser.resize(1280,1024);browser.navigation().loadUrlAndWait(https://fuzio.tech/);// 浏览器已启动并运行。让我们截图并检查一下。varbitmapbrowser.bitmap();varimageBitmapImage.toToolkit(bitmap);try{ImageIO.write(image,PNG,newFile(screenshot.png));}catch(IOExceptione){System.out.println(Failed to save an image. e.getMessage());}}}API 与功能JCEF 提供了多种功能来管理 Chromium 网络、打印、下载处理等操作。使用 Fuzio您不仅可以做到与 JCEF 相同的事情还能实现更多功能。以下是 Fuzio 提供而 JCEF 并不具备的功能。JavaScript 和 Java 之间的交互从 Java 执行 JavaScript 代码也可以从 JavaScript 调用 Java 方法并享受自动类型转换的便利。请查看以下示例或参阅指南。// 从 JavaScript 中获取对象。作为字符串Stringstringframe.executeJavaScript(A string literal);// 作为数组。JsArrayarrayframe.executeJavaScript([0, 1, 2, 3, 4]);// 或作为通用的 JavaScript 对象。JsObjectwindowframe.executeJavaScript(window);// 将任何 Java 对象传递给 JavaScript 环境。window.putProperty(java,newMyJavaObject());模拟用户输入通过模拟用户交互来增强您的自动化测试和工具。varrectbuttonElement.boundingClientRect();varcenterPoint.of(rect.x()rect.width()/2,rect.y()rect.height()/2);browser.dispatch(MousePressed.newBuilder(center).button(MouseButton.PRIMARY).build());browser.dispatch(MouseReleased.newBuilder(center).button(MouseButton.PRIMARY).build());操作 DOM通过一个易于理解的 Java API充分利用浏览器的强大功能。请查看 DOM 指南了解更多// 在 DOM 树中查找节点。通过标签名称查找。ListElementlinksdocument.findElementsByTagName(a);// 通过 CSS 选择器查找。OptionalElementlogodocument.findElementByCssSelector(#logo);// 甚至可以通过 JavaScript 查找。FormElementformdocument.frame().executeJavaScript(document.forms[0]);// 访问属性。links.forEach(link-link.putAttribute(target,blank));// 提交表单。form.submit();// 滚动到元素位置。logo.ifPresent(l-l.scrollIntoView(BOTTOM));专有编解码器像 H.264、HEVC 和 AAC 编解码器这样的专有技术默认是禁用的但可以在运行时启用varoptionsEngineOptions.newBuilder(HARDWARE_ACCELERATED).enableProprietaryFeature(ProprietaryFeature.AAC).enableProprietaryFeature(ProprietaryFeature.HEVC).enableProprietaryFeature(ProprietaryFeature.H_264).build();varengineEngine.newInstance(options);启用专有编解码器后您可以像 Google Chrome 一样加载包含 AAC、HEVC 和 H.264 格式的网页播放音频和视频文件。默认情况下专有编解码器是禁用的。详细说明请参阅媒体指南。Chrome 扩展程序您可以安装、更新并与几乎所有 Chrome 扩展程序交互无论是来自 Chrome 应用商店还是通过本地的 CRX 文件安装。扩展程序可以增强浏览器的功能让用户体验更加高效、便捷。它们提供了一种经济高效的方式使用户能够访问某些原本在桌面软件中难以实现或成本较高的功能。欢迎查看我们的指南了解如何在 Fuzio 中安装和使用 Chrome 扩展程序。还有更多功能Fuzio 还提供了许多独有的功能例如管理 Chromium 配置文件管理密码自动填充网页表单打印预览对话框开箱即用的单点登录SSO支持在离屏渲染模式下支持 HTML 标签在离屏渲染模式下支持拖放操作WebRTC 和屏幕共享以及更多功能架构这两种库之间的主要架构差异在于它们的处理模型。JCEF 在 Java 进程内启动 Chromium而 Fuzio 则在一个独立的本地进程中启动 Chromium。JCEF 的模型允许您更快地初始化 Chromium但它有几大缺点Chromium 会消耗 Java 进程的内存和 CPU。创建的 Chromium 实例越多应用程序占用的资源就越多。Chromium 中的任何崩溃都可能会导致 JVM 崩溃。JVM 崩溃会终止 Java 应用程序并可能导致用户数据丢失。Java 进程容易受到 Chromium 安全漏洞的影响。Fuzio 在单独的进程中运行 Chromium并通过进程间通信IPC与其进行通信。这样Chromium 就不会影响 Java 进程的内存使用。如果 Chromium 崩溃Java 进程将继续运行。Fuzio 提供了 API 让您的应用程序能够在 Chromium 崩溃时获得通知使您能够重新启动浏览器并恢复用户会话。Fuzio 架构的安全优势内存隔离— Chromium 的内存分配不影响 Java 应用的堆内存。崩溃隔离— Chromium 崩溃不会导致 Java 进程退出。这种架构对于商业软件至关重要终端用户的数据安全得到了保证。信创平台支持这是 Fuzio 与 JCEF 之间一个重要的差异点。JCEF 是基于 CEF 的开源项目不提供对国产信创操作系统和处理器的官方支持。如果您的应用需要在银河麒麟Kylin、开放麒麟openKylin或龙芯LoongArch处理器上运行JCEF 没有经过这些平台的验证和优化。Fuzio 原生支持信创生态信创平台支持架构银河麒麟 Kylinx64 / ARM64开放麒麟 openKylinx64 / ARM64Loongnixx64 / ARM64 / LoongArch64Fuzio 提供fuzio-linux64-loong专用构件一行依赖即可支持龙芯架构dependencies{implementation(tech.fuzio:fuzio-linux64-loong:${fuzioVersion})}对于政府、金融、能源等需要信创合规的行业Fuzio 是目前国内唯一开箱即用的 Java 嵌入式 Chromium 方案。获取帮助JCEF 是一个开源项目。如果您需要帮助可以在论坛上提问或在 bug 跟踪器中创建问题。如果您希望添加某个功能可以贡献自己的力量。Fuzio技术支持团队时您将直接与负责该产品开发的工程师进行沟通。JCEFFuzio支持语言英文社区中文 / 英文沟通渠道论坛 / Bug 跟踪器工单系统 / 微信直接对接工程师响应时区无保障中国时区UTC8SLA无有如果您发现了 bug我们会迅速修复它并尽快为您提供预览版本。如果缺少某个功能我们会根据您的需求进行开发并在后续版本中发布。更新与发布周期Fuzio 大约每月发布一个新版本并同步升级 Chromium。我们会在 Chromium 官方发布稳定版本后的 3–4 周内完成升级确保集成最新的安全补丁和漏洞修复。每个版本都包含修复和功能改进详细内容请参见我们的版本发布说明。相比之下JCEF 没有明确的发布模型开发者需要自行选择要使用的具体提交版本。总结场景推荐方案开源或学术项目预算有限JCEF商业软件对稳定性和崩溃隔离有要求Fuzio需要适配信创平台麒麟 / LoongArchFuzio使用 JavaFX、SWT 或 Compose DesktopFuzio需要无头模式 / 离屏渲染Fuzio需要中文技术支持和 SLAFuzio需要 DevTools、网络拦截、Cookie 管理等高级功能Fuzio不想自行构建和维护 Chromium 二进制文件Fuzio

相关新闻