De 7.11 para 7.12
No JxBrowser 7.12, o motor Chromium foi atualizado para a versão 84. Esta versão do Chromium tem várias alterações de ruptura no código fonte que afetam a API pública do JxBrowser. Neste guia de migração, descrevemos qual a API que foi removida na versão 7.12 e quais as alternativas você deveria utilizar.
Rede
Substituição de cabeçalhos de requests HTTP
v7.11
Os callbacks BeforeSendHeadersCallback
e BeforeSendProxyHeadersCallback
foram removidos no Chromium 84.
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
Para substituir os cabeçalhos HTTP antes de serem enviados para um servidor Web, utilize a seguinte API:
network.set(BeforeStartTransactionCallback.class, params ->
BeforeStartTransactionCallback.Response.override(modifiedHeaders));
network.set(BeforeStartTransactionCallback::class.java,
BeforeStartTransactionCallback { params ->
BeforeStartTransactionCallback.Response.override(modifiedHeaders)
}
)
Filtragem de recursos
O callback LoadResourceCallback
foi removido no Chromium 84.
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
Use a chamada de retorno BeforeUrlRequestCallback
para filtrar recursos como mostrado abaixo:
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()
}
}
)
Cache
v7.11
O método obsoleto HttpCache.clearDiskCache(Runnable)
foi removido:
httpCache.clearDiskCache(() -> {
// A cache HTTP foi limpa.
});
httpCache.clearDiskCache {
// A cache HTTP foi limpa.
}
v7.12
Em vez disso, utilize a seguinte API:
CompletableFuture<Void> future = httpCache.clear();
val future: CompletableFuture<Void> = httpCache.clear()
Entrada do usuário
Roda do mouse
v7.11
Os seguintes métodos obsoletos com.teamdev.jxbrowser.ui.event.MouseWheel
foram removidos:
isHorizontalScroll()
scrollbarPixelsPerLine()
unitsToScroll()
v7.12
Em vez disso, utilize os métodos deltaX()
e deltaY()
.
DOM
Eventos do teclado
A forma de acessar o código da chave em com.teamdev.jxbrowser.dom.event.KeyEvent
foi alterada. Como resultado, o método não utilizado com.teamdev.jxbrowser.dom.event.KeyEvent.keyCode()
foi removido.
v7.11
Para acessar o código da chave do KeyEvent
do DOM, utilizar a seguinte 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)
Esta abordagem tem várias limitações: não há forma de obter o caractere da tecla pressionada no idioma atualmente selecionado. Só é possível obter o código da chave como um valor de enum predefinido.
v7.12
Nesta versão, melhoramos esta funcionalidade, portanto, agora funciona de forma semelhante a da 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)
Agora você pode obter o código de tecla esperado e uma representação em cadeia do caractere da tecla pressionada no idioma atualmente selecionado.
API Bridge JavaScript-Java
O acesso a métodos estáticos públicos Java a partir do JavaScript é agora proibido.
A ponte JavaScript-Java permite injetar objetos Java no JavaScript e trabalhar com eles através de referências Java. Trabalhar com os métodos estáticos através de uma referência de objeto Java é uma forma não recomendada e propensa a erros.
Navegação
Carregando URL
v7.11
Os seguintes métodos Navegação
obsoletos foram removidos:
loadUrlAndWait(String, Timestamp)
loadUrlAndWait(LoadUrlParams, Timestamp)
v7.12
Em vez disso, utilize os seguintes métodos:
loadUrlAndWait(String url, Duration timeout)
loadUrlAndWait(LoadUrlParams params, Duration timeout)
Tempo limite predefinido
v7.11
O campo estático Navigation.DEFAULT_TIMEOUT_IN_SECONDS
foi removido.
v7.12
Em vez disso, utilize a seguinte alternativa:
Duration timeout = Navigation.defaultTimeout();
val timeout: Duration = Navigation.defaultTimeout()
API removida
As seguintes classes e métodos foram removidos porque a funcionalidade correspondente no Chromium 84 já não existe e não foram apresentadas alternativas:
- O método
com.teamdev.jxbrowser.navigation.event.FrameLoadFailed.errorDescription()
foi removido sem qualquer alternativa. - O método
com.teamdev.jxbrowser.net.event.RequestCompleted.isStarted()
foi removido porque agora o request de URL não pode ser completado se este não tiver sido iniciado. Portanto, não faz sentido usar este método porque ele sempre retornaverdadeiro
. - O campo estático
Timestamp.MILLIS_PER_SECOND
foi removido.