List icon 目录

从 7.11 到 7.12

在 JxBrowser 7.12 中,Chromium Engine 已升级至版本 84。此 Chromium 版本在源代码中有几个重大更改,这些更改影响了 JxBrowser 的公共 API。在本迁移指南中,我们将描述在 7.12 中被移除的 API,以及您应该使用的替代方案。

网络

覆盖 HTTP 请求标头

v7.11

在 Chromium 84 版本中,BeforeSendHeadersCallbackBeforeSendProxyHeadersCallback 回调已被移除。

Java
Kotlin
network.set(BeforeSendHeadersCallback.class, params -> 
        BeforeSendHeadersCallback.Response.override(modifiedHeaders));
network.set(BeforeSendProxyHeadersCallback.class, params ->
        BeforeSendProxyHeadersCallback.Response.override(modifiedHeaders));
network.set(BeforeSendHeadersCallback::class.java,
    BeforeSendHeadersCallback { params ->
        BeforeSendHeadersCallback.Response.override(modifiedHeaders)
    }
)
network.set(BeforeSendProxyHeadersCallback::class.java,
    BeforeSendProxyHeadersCallback { params ->
        BeforeSendProxyHeadersCallback.Response.override(modifiedHeaders)
    }
)

v7.12

要在 HTTP 标头发送到 Web 服务器之前覆盖它们,请使用以下 API:

Java
Kotlin
network.set(BeforeStartTransactionCallback.class, params -> 
    BeforeStartTransactionCallback.Response.override(modifiedHeaders));
network.set(BeforeStartTransactionCallback::class.java,
    BeforeStartTransactionCallback { params ->
        BeforeStartTransactionCallback.Response.override(modifiedHeaders)
    }
)

过滤资源

在 Chromium 84 中,LoadResourceCallback 回调已被移除。

v7.11

Java
Kotlin
network.set(LoadResourceCallback.class, params -> {
    if (params.resourceType() == ResourceType.IMAGE) {
        return LoadResourceCallback.Response.cancel();
    }
    return LoadResourceCallback.Response.load();
});
network.set(LoadResourceCallback::class.java,
    LoadResourceCallback { params ->
        if (params.resourceType() == ResourceType.IMAGE) {
            LoadResourceCallback.Response.cancel()
        } else {
            LoadResourceCallback.Response.load()
        }
    }
)

v7.12

使用 BeforeUrlRequestCallback 回调来过滤资源,如下所示:

Java
Kotlin
network.set(BeforeUrlRequestCallback.class, params -> {
    if (params.urlRequest().resourceType() == ResourceType.IMAGE) {
        return BeforeUrlRequestCallback.Response.cancel();
    }
    return BeforeUrlRequestCallback.Response.proceed();
});
network.set(BeforeUrlRequestCallback::class.java,
    BeforeUrlRequestCallback { params ->
        if (params.urlRequest().resourceType() == ResourceType.IMAGE) {
            BeforeUrlRequestCallback.Response.cancel()
        } else {
            BeforeUrlRequestCallback.Response.proceed()
        }
    }
)

缓存

v7.11

已弃用的 HttpCache.clearDiskCache(Runnable) 方法已被移除:

Java
Kotlin
httpCache.clearDiskCache(() -> {
    // HTTP 缓存已被清除。
});
httpCache.clearDiskCache {
    // HTTP 缓存已被清除。
}

v7.12

请改用以下 API:

Java
Kotlin
CompletableFuture<Void> future = httpCache.clear();
val future: CompletableFuture<Void> = httpCache.clear()

用户输入

鼠标滚轮

v7.11

以下已弃用的 com.teamdev.jxbrowser.ui.event.MouseWheel 方法已被移除:

  • isHorizontalScroll()
  • scrollbarPixelsPerLine()
  • unitsToScroll()

v7.12

使用 deltaX()deltaY() 方法来代替。

DOM

键盘事件

com.teamdev.jxbrowser.dom.event.KeyEvent 中访问键码的方式已经更改。因此,无用的 com.teamdev.jxbrowser.dom.event.KeyEvent.keyCode() 方法已被移除。

v7.11

要访问 DOM KeyEvent 的键码,您可以使用以下 API:

Java
Kotlin
document.addEventListener(EventType.KEY_PRESS, event -> {
    if (event instanceof KeyEvent) {
        KeyEvent keyEvent = (KeyEvent) event;
        System.out.println("DOM KeyEvent: keyCode=" + keyEvent.keyCode());
    }
}, false);
document.addEventListener(EventType.KEY_PRESS, { event ->
    if (event is KeyEvent) {
        println("DOM KeyEvent: keyCode=${event.keyCode}")
    }
}, false)

这种方法有几个限制:无法获取当前选择语言中按键的字符。您只能获取作为预定义枚举值的键码。

v7.12

在此版本中,我们改进了这一功能,所以现在它的工作方式与 DOM API 中的工作方式相近:

Java
Kotlin
document.addEventListener(EventType.KEY_PRESS, event -> {
    if (event instanceof KeyEvent) {
        KeyEvent keyEvent = (KeyEvent) event;
        DomKeyCode keyCode = keyEvent.domKeyCode();
        String character = keyEvent.character();
        System.out.println("DOM KeyEvent: keyCode=" + keyCode  + ", character=" + character);
    }
}, false);
document.addEventListener(EventType.KEY_PRESS, { event ->
    if (event is KeyEvent) {
        val keyCode = event.keyCode
        val character = event.keyChar
        println("DOM KeyEvent: keyCode=$keyCode, character=$character")
    }
}, false)

现在您可以获取预期的键码,并获取当前选择语言中按键字符的字符串表示。

JavaScript-Java Bridge API

现在禁止从 JavaScript 访问 Java 的公共静态方法。

JavaScript-Java 桥接允许将 Java 对象注入到 JavaScript 中,并通过 Java 引用与它们进行交互。通过 Java 对象引用来使用静态方法是不推荐的,且容易出错。

导航

加载 URL

v7.11

以下已弃用的 Navigation 方法已被移除:

  • loadUrlAndWait(String, Timestamp)
  • loadUrlAndWait(LoadUrlParams, Timestamp)

v7.12

请改用以下方法:

  • loadUrlAndWait(String url, Duration timeout)
  • loadUrlAndWait(LoadUrlParams params, Duration timeout)

默认超时

v7.11

已弃用的 Navigation.DEFAULT_TIMEOUT_IN_SECONDS 静态字段已被移除。

v7.12

请使用以下替代方案:

Java
Kotlin
Duration timeout = Navigation.defaultTimeout();
val timeout: Duration = Navigation.defaultTimeout()

已移除的 API

由于 Chromium 84 中对应的功能不再存在且没有提供替代方法,以下类和方法已被移除:

  • com.teamdev.jxbrowser.navigation.event.FrameLoadFailed.errorDescription() 方法已被移除,并且没有提供任何替代方案。
  • com.teamdev.jxbrowser.net.event.RequestCompleted.isStarted() 方法已被移除,因为现在如果URL请求未启动,则无法完成它。因此,这个方法没有意义,因为它总是返回 true
  • 已弃用的 Timestamp.MILLIS_PER_SECOND 静态字段已被移除。