De 7.16 para 7.17
Neste guia de migração, descrevemos qual a API que foi removida na versão 7.17 e quais as alternativas que você deveria utilizar.
Navegação
Carregamento de HTML
v7.16
Para carregar HTML de uma string para um frame numa página web, os seguintes métodos Frame
são usados:
loadHtml(String html)
loadHtml(LoadHtmlParams params)
loadData(LoadDataParams params)
v7.17
Nas versões recentes do Chromium, a funcionalidade que permite carregar HTML num frame de uma página Web foi alterada por motivos de segurança e já não funciona corretamente. Por exemplo, se o HTML carregado tiver imagens externas localizadas num servidor Web, estas não serão carregadas e apresentadas.
Para nos livrarmos de comportamentos inesperados e potenciais erros, decidimos remover estes métodos e sugerimos as seguintes abordagens alternativas para carregar HTML a partir de uma cadeia de caracteres.
Carregando o URL de dados:
String html = "<html><body>Olá</body></html>";
String base64Html = Base64.getEncoder().encodeToString(html.getBytes(UTF_8));
String dataUrl = "data:text/html;charset=utf-8;base64," + base64Html;
browser.navigation().loadUrl(dataUrl);
val html = "<html><body>Olá</body></html>"
val base64Html = Base64.getEncoder().encodeToString(html.toByteArray(UTF_8))
val dataUrl = "data:text/html;charset=utf-8;base64,$base64Html"
browser.navigation().loadUrl(dataUrl)
Registando um esquema personalizado e interceptando os requests de URL necessários:
InterceptUrlRequestCallback interceptCallback = params -> {
if (params.urlRequest().url().endsWith("?hello")) {
byte[] bytes = "<html><body>Hello</body></html>".getBytes();
UrlRequestJob job = params.newUrlRequestJob(
UrlRequestJob.Options
.newBuilder(HttpStatus.OK)
.addHttpHeader(HttpHeader.of("Content-Type", "text/html"))
.build());
job.write(bytes);
job.complete();
return Response.intercept(job);
}
return Response.proceed();
};
EngineOptions options = EngineOptions.newBuilder(renderingMode)
.addScheme(HTTP, interceptCallback)
.build();
Engine engine = Engine.newInstance(options);
Browser browser = engine.newBrowser();
browser.navigation().loadUrl("http://load.html/?hello");
val interceptCallback = InterceptUrlRequestCallback { params ->
if (params.urlRequest().url().endsWith("?hello")) {
val bytes = "<html><body>Hello</body></html>".toByteArray()
val job = params.newUrlRequestJob(
UrlRequestJob.Options
.newBuilder(HttpStatus.OK)
.addHttpHeader(HttpHeader.of("Content-Type", "text/html"))
.build()
)
job.write(bytes)
job.complete()
Response.intercept(job)
} else {
Response.proceed()
}
}
val options = EngineOptions.newBuilder(renderingMode)
.addScheme(HTTP, interceptCallback)
.build()
val engine = Engine.newInstance(options)
val browser = engine.newBrowser()
browser.navigation().loadUrl("http://load.html/?hello"))
Leia mais sobre estas abordagens em Navegação.
Propriedades do sistema
As seguintes propriedades internas do sistema foram removidas:
jxbrowser.display.watcher.off
jxbrowser.enable.custom.dropdowns
Utilize a propriedade de sistema jxbrowser.desktop.headless.on
para desativar o display watcher e
ativar drop downs personalizados no modo de renderização fora de tela.