从 7.11 到 7.12
在 JxBrowser 7.12 中,Chromium Engine 已升级至版本 84。此 Chromium 版本在源代码中有几个重大更改,这些更改影响了 JxBrowser 的公共 API。在本迁移指南中,我们将描述在 7.12 中被移除的 API,以及您应该使用的替代方案。
网络
覆盖 HTTP 请求标头
v7.11
在 Chromium 84 版本中,BeforeSendHeadersCallback
和 BeforeSendProxyHeadersCallback
回调已被移除。
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:
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
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
回调来过滤资源,如下所示:
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)
方法已被移除:
httpCache.clearDiskCache(() -> {
// HTTP 缓存已被清除。
});
httpCache.clearDiskCache {
// HTTP 缓存已被清除。
}
v7.12
请改用以下 API:
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:
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 中的工作方式相近:
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
请使用以下替代方案:
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
静态字段已被移除。