List icon 目录

发布日期 2020年8月14日

JxBrowser 7.10

在此次小更新中,我们改进了 Swing、JavaFX 和 SWT 的离屏渲染模式下的渲染性能,恢复了在 7.0 版本中暂时移除的禁用内部 Chromium 流量的功能,并提升了库的稳定性。

渲染性能

我们重新实现了离屏渲染模式,以提高其在所有支持的平台和UI工具包上的渲染性能。

在不同平台上对 HTML5 视频进行渲染性能测试的结果_以每秒帧数(FPS)为单位_如下:

Windows

  • 处理器:Intel Core i7 7700k 4.2 GHz,显卡:GPU GTX 1070
  • 视频分辨率:1920x1080

Swing

Windows Swing FPS

JavaFX

Windows JavaFX FPS

SWT

Windows SWT FPS

macOS

  • MacBook Pro 15 英寸,处理器:Intel Core i7 2.9GHz,显卡:Radeon Pro 650 4GB
  • 视频分辨率:2880x1800

Swing

macOS Swing FPS

JavaFX

macOS JavaFX FPS

SWT

macOS SWT FPS

Linux

  • 处理器:AMD FX-8300 3.3 GHz,显卡:Radeon RX 480
  • 视频分辨率:1920x1080

Swing

Linux Swing FPS

JavaFX

Linux JavaFX FPS

SWT

Linux SWT FPS

对于 Linux 平台上的 SWT UI 工具包,我们尚未在离屏渲染模式下进行任何优化。

Chromium 流量

Chromium 的功能,如 Google Cloud Messaging(Google 云消息传递)、Translate Ranker(翻译排名器)、Extensions Updater(扩展程序更新器)、Safe Browsing(安全浏览)、SpellChecker(拼写检查器)、Widevine 等,会向外部 Google Web 服务发出请求,例如 https://ssl.gstatic.comhttps://clients4.google.com 等。

当无法访问这些 Web 服务或者不希望产生这些额外的流量时,您可以使用以下 API:

Engine engine = Engine.newInstance(
        EngineOptions.newBuilder(renderingMode)
                .disableChromiumTraffic()
                .build());

此选项仅允许禁用那些不能通过 JxBrowser API 访问的 Chromium 功能。例如,通过 JxBrowser API 可以访问 SpellChecker 和 Widevine 功能,因此该选项不会禁用这些功能导致的流量。

聚焦的 DOM 元素

DOM API 已扩展,新增了 Document.focusedElement() 方法,该方法允许获取当前页面上获得焦点的 HTML 元素:

document.focusedElement().ifPresent(element -> {
    ...
});

改进

  • 已恢复拼写检查功能。
  • com.teamdev.jxbrowser.view.swt.callback.DefaultStartDownloadCallback 的实现在目标文件已存在且将被覆盖时会提示。
  • The DevTools.remoteDebuggingUrl() 方法现在返回的 URL 可以在没有互联网连接时使用。

IPC 消息顺序

在之前的版本中,当调用同步回调时,IPC(进程间通信)消息的顺序可能会发生变化。例如,通过 Browser.dispatch() 方法分发键盘事件可能会导致网页文本字段中出现字母随机混合的问题。

**解释:**当调用同步回调我们会启动一个嵌套循环来处理传入的消息。问题在于,在进入调用回调方法和实际开始嵌套循环之间存在一个窗口。因此,我们可能会遇到这样的情况:一些传入消息被发送到 Chromium 线程队列,并且这些消息会在方法返回后处理。同时,那些在启动嵌套循环时到达的消息会在方法返回之前处理,这改变了消息发送的顺序。

在此版本中,我们改进了内部 IPC 逻辑,以消除这种情况。这个改进引入了一个重要的要求,即您应该如何处理同步回调中的代码。如果您在同步回调中的一个单独线程中执行某些逻辑,并且阻塞回调等待逻辑执行完成,可能会导致死锁:

// 注册一个同步回调。
browser.set(SomeSyncCallback.class, params -> {
    // 在单独的线程中调用一些逻辑,并阻塞当前线程的执行,直到这些逻辑执行完毕。
    invokeInSeparateThreadAndWait(() -> {
        // 调用一个同步方法。
        browser.someSyncMethod(); // <-- 死锁:这个方法将永远不会返回。
    });
    return Response.proceed();
});

为了避免死锁,请改用以下方法:

// 注册一个同步回调。
browser.set(SomeSyncCallback.class, params -> {
    // 调用一个同步方法。 
    browser.someSyncMethod();
    return Response.proceed();
});

已修复的问题

  • 在 macOS 上硬件加速渲染模式下调整 BrowserView 大小时出现意外的内容缩放问题。
  • 在连续调用 Navigation.loadUrlAndWait() 时出现 NavigationException: Failed to load resource: ABORTED 错误。
  • 在 Windows 上硬件加速渲染模式下,从 BrowserView 退出并返回时,鼠标会卡在平移状态。
  • 在离屏渲染模式下隐藏 Stage 后,JavaFX BrowserView 不显示。
  • 关闭 Engine 时出现崩溃或冻结。
  • 在 Windows 上硬件加速渲染模式下显示 BrowserView 时出现崩溃。
  • 库经常在 IpcLibrary.sendData() 处卡住。
  • Swing、JavaFX 和 SWT UI 工具包类被错误地放置在 jxbrowser.jar 中,而它们应该位于单独的 JAR 文件中。
  • SWT BrowserView 中的焦点恢复功能无法正常工作。
  • Node.xPath() 方法生成的 Node 索引不正确。
  • 在 Linux 上,在调用 ldd 命令检查缺少的系统库时,Engine 初始化卡住。
  • 访问非空 cookie 存储时出现死锁。
  • 在 Windows Server 2012 上出现的 Chromium 欢迎页面问题。
  • 使用 Browser.dispatch() 方法调度键盘事件时顺序不正确。

下载 JxBrowser 7.10

请提供您的电子邮箱地址,我们会尽快将下载说明发送给您。

发送...
请检查您的收件箱。

我们无法发送电子邮件。请使用直接链接下载JxBrowser。

如果您已经是我们的注册客户,您无需任何操作,即可轻松享受此次更新。

如果您希望深入了解并体验我们的产品,您可以申请评估许可证。

获取免费 30 天体验