Publicado em 30 de maio de 2019

JxBrowser 7.0

Temos o prazer de lhe apresentar o JxBrowser 7. Esta versão principal traz muitas melhorias e novas funcionalidades para a API pública da biblioteca.

A API foi expandida com novas classes, interfaces, métodos, eventos e chamadas de retorno. Também redesenhamos algumas das partes da para impossibilitar a utilização incorreta da biblioteca.

A nova versão requer o JDK 1.8 ou superior. Nos permite trazer as funcionalidades do Java 8, como Optional, Lambda Expressions, Stream API, métodos estáticos em Interfaces, etc. para a API pública e para a implementação interna.

A arquitetura da biblioteca também foi melhorada. Agora é possível executar e controlar o ciclo de vida de várias instâncias do Chromium numa única aplicação Java. Cada instância do Chromium pode ser configurada com os seus próprios dados de usuário diretório, porta de depuração remota, idioma, etc. Esta alteração te permite criar e utilizar duas ou mais instâncias do Browser absolutamente independentes simultâneamente.

Arquitetura

A nova arquitetura tem a seguinte estrutura:

Arquitetura JxBrowser

Com esta atualização introduzimos dois novos objetos: Engine e Frame.

O Engine fornece o acesso à funcionalidade central do motor Chromium. O exemplo a seguir demonstra como criar uma instância Engine:

Engine engine = Engine.newInstance(
        EngineOptions.newBuilder(RenderingMode.HARDWARE_ACCELERATED)
                .userDataDir(Paths.get("/users/me/.jxbrowser/user_data"))
                .language(Language.GERMAN)
                .build());

Para cada instância do Engine é utilizado um processo Chromium Main separado.

Criando Engines

Cada página web carregada num Browser tem um Frame principal. O próprio Frame pode ter frames filhos. Você pode usar Frame para acessar e trabalhar com DOM e JavaScript. Por exemplo:

browser.mainFrame().ifPresent(mainFrame ->
        mainFrame.executeJavaScript("document.title = 'Hello';"));

Pré-visualização da impressão

Agora, quando o usuário ou o JavaScript imprime uma página Web, você pode ser apresentada uma caixa de diálogo padrão de Pré-visualização de Impressão. Você pode selecionar opções de impressão preferidas nesta caixa de diálogo:

Pré-visualização de Impressão

JavaScript e DOM

Conversão automática de tipos

O JavaScript e o Java trabalham com tipos primitivos diferentes. O JxBrowser 7.0 implementa conversão automática de tipos de JavaScript para tipos Java e vice-versa. Agora você pode escrever o código como:

String title = frame.executeJavaScript("document.title");
double number = frame.executeJavaScript("123");
boolean bool = frame.executeJavaScript("true");
JsObject window = frame.executeJavaScript("window");

DOM wrappers

Com a conversão automática de tipos, agora você pode acessar objetos DOM JavaScript e trabalhar com eles através da DOM API do JxBrowser. Por exemplo:

Document document = frame.executeJavaScript("document");

E aqui está como você pode trabalhar com um objeto DOM JavaScript como com um objeto JavaScript:

JsObject document = frame.executeJavaScript("document");

Localização

Você pode configurar o Engine com um dos idiomas suportados utilizando o seguinte código:

Engine engine = Engine.newInstance(
        EngineOptions.newBuilder(RenderingMode.HARDWARE_ACCELERATED)
                .language(Language.GERMAN)
                .build());

Este exemplo configura o motor Chromium para utilizar o idioma alemão nas páginas de erro padrão:

Página de erro

Não são apenas as páginas de erro que suportam a localização. A mensagem dialogs também suporta a localização:

Página de Erro

Rede

Com o JxBrowser 7.0 você pode emular um servidor Web, interceptando todos os requests de URL e fornecendo respostas URL personalizadas em de forma síncrona e assíncrona. O exemplo seguinte demonstra como enviar dados de resposta de forma assíncrona:

network.set(InterceptRequestCallback.class, params -> {
    Options options = Options.newBuilder(params.urlRequest().id(), HttpStatus.OK)
            .addHttpHeader(HttpHeader.of("Content-Type", "text/html"))
            .build();
    UrlRequestJob urlRequestJob = network.newUrlRequestJob(options);
    new Thread(() -> {
        urlRequestJob.write("<html><body>Text</body></html>".getBytes());
        urlRequestJob.complete();
    }).start();
    return Response.intercept(urlRequestJob);
});

Segurança

@JsAccessible

O JxBrowser permite injetar objetos Java no JavaScript e invocar os seus métodos públicos a partir do código JavaScript. Por razões de segurança do, apenas os métodos públicos anotados com @JsAccessible podem ser acessados a partir do JavaScript. Os campos do objeto Java não estão acessíveis. Se o JavaScript chamar o método que não existe no objeto Java injetado ou se o método não for público e não tiver sido anotado, será lançada uma exceção JavaScript com uma mensagem de erro adequada.

O exemplo a seguir demonstra como injetar um objeto Java no JavaScript:

public class JavaObject {
    @JsAccessible
    public String sayHelloTo(String firstName) {
        return "Hello, " + firstName + "!";
    }
}
...
JsObject window = frame.executeJavaScript("window");
window.putProperty("java", new JavaObject());

Você pode então referir-se ao objeto e chamar o seu método a partir do código JavaScript:

console.log(window.java.sayHelloTo("John"));

Sandbox

A Sandbox no Windows agora está ativada por padrão.

Estas são apenas as alterações mais notáveis. Consulte o novo portal de documentação para obter a lista completa de funcionalidades e alterações no JxBrowser 7.0.

Características removidas

A partir desta versão, o JxBrowser deixa de suportar os JREs 1.6 e 1.7 da Oracle, os JREs da Apple e da IBM, o macOS 10.9, e OSGi.

Para lançarmos o JxBrowser 7.0 mais cedo, temporariamente abandonamos várias outras funcionalidades. Planejamos voltar a introduzi-las nas próximas versões.

Como migrar

A API da nova versão principal não é retrocompatível com a versão 6.x anterior. Assim, se a sua aplicação já utiliza o JxBrowser 6, consulte este guia de migração para obter instruções detalhadas sobre como alterar o seu código para funcionar com a versão 7.0.

Baixe o JxBrowser 7.0

Por favor, compartilhe seu e-mail conosco, e nós lhe enviaremos instruções para download.

Enviando...
Por favor, verifique sua caixa de entrada.

Não foi possível enviar o e-mail. Por favor, use o link direto para baixar o JxBrowser.

Se você é um cliente registrado, não precisa fazer nada para usar esta atualização.

Se você deseja avaliar o produto, precisa de uma licença de avaliação.

Obtenha Teste Gratuito de 30 dias
Go Top