De 7.12.2 para 7.13
Neste guia de migração, descrevemos qual a API que foi removida na versão 7.13 e quais as alternativas que você deveria utilizar.
Rede
Interceptação de requests
v7.12.2
Para interceptar requests de URL com os esquemas padrão (por exemplo, http
, https
) e personalizados (por exemplo, my-app
, jxb
) é utilizada a chamada de retorno InterceptRequestCallback
. Ela permite interceptar requests e substituir dados de resposta como se fossem enviados por um servidor Web.
O exemplo seguinte demonstra a como interceptar requests com o esquema personalizado jxb
:
network.set(InterceptRequestCallback.class, params -> {
UrlRequest urlRequest = params.urlRequest();
if (urlRequest.url().startsWith("jxb://")) {
UrlRequestJob job = network.newUrlRequestJob(
UrlRequestJob.Options
.newBuilder(urlRequest.id(), HttpStatus.OK)
.addHttpHeader(HttpHeader.of("Content-Type", "text/plain"))
.build());
job.write("Hello!".getBytes());
job.complete();
return InterceptRequestCallback.Response.intercept(job);
}
return InterceptRequestCallback.Response.proceed();
});
...
browser.navigation().loadUrl("jxb://app/hello");
network.set(InterceptRequestCallback::class.java, InterceptRequestCallback { params ->
val urlRequest: UrlRequest = params.urlRequest()
if (urlRequest.url().startsWith("jxb://")) {
val job = network.newUrlRequestJob(
UrlRequestJob.Options
.newBuilder(urlRequest.id(), HttpStatus.OK)
.addHttpHeader(HttpHeader.of("Content-Type", "text/plain"))
.build()
)
job.write("Hello!".toByteArray())
job.complete()
return InterceptRequestCallback.Response.intercept(job)
}
InterceptRequestCallback.Response.proceed()
})
...
browser.navigation().loadUrl("jxb://app/hello")
v7.13
A abordagem anterior, que consiste em interceptar todos os requests, tem várias limitações e problemas de segurança:
- os esquemas personalizados interceptados são tratados como não-padrão, portanto, não é possível interceptar o esquema
jxb
e retornar HTML com JavaScript que acessaLocalStorage
. Isto levará a um erro de acesso negado; - nem todos os esquemas podem ser interceptados. Por exemplo, é proibido interceptar esquemas como
chrome
,data
, ouchrome-extensions
. A API permite fazer isto, o que pode levar a um comportamento inesperado ou a uma falha no Chromium; - alguns esquemas são tratados como esquemas locais, por exemplo,
file
. Não podem ser interceptados porque não se trata de um request de rede.
Nesta versão, melhoramos a API que permite interceptar requests de URL e registar esquemas personalizados. A nova versão não tem as limitações de segurança e os problemas descritos acima.
O exemplo seguinte demonstra como registar o esquema jxb
personalizado e interceptar todos os requests de URL correspondentes:
EngineOptions options = EngineOptions
.newBuilder(renderingMode)
.addScheme(Scheme.of("jxb"), params -> {
UrlRequestJob job = params.newUrlRequestJob(
UrlRequestJob.Options
.newBuilder(HttpStatus.OK)
.addHttpHeader(HttpHeader.of("Content-Type", "text/plain"))
.build());
job.write("Hello!".getBytes());
job.complete();
return Response.intercept(job);
})
.build();
Engine engine = Engine.newInstance(options);
...
browser.navigation().loadUrl("jxb://app/hello");
val options = EngineOptions
.newBuilder(renderingMode)
.addScheme(Scheme.of("jxb")) { params ->
val job = params.newUrlRequestJob(
UrlRequestJob.Options
.newBuilder(HttpStatus.OK)
.addHttpHeader(HttpHeader.of("Content-Type", "text/plain"))
.build()
)
job.write("Hello!".toByteArray())
job.complete()
Response.intercept(job)
}
.build()
val engine = Engine.newInstance(options)
...
browser.navigation().loadUrl("jxb://app/hello")
API removida
Não há necessidade de utilizar o método com.teamdev.jxbrowser.net.UrlRequest.id()
devido a forma alternativa de registar esquemas personalizados e interceptar requests de URL, pelo que foi removido.