Publicado em 27 de fevereiro de 2020

DotNetBrowser 2.0

Conheça uma grande atualização do DotNetBrowser — versão 2.0! Introduz alterações fundamentais na API pública da biblioteca, permitindo muitas novas funcionalidades e espaço para um maior crescimento.

Melhoramos a implementação da biblioteca para a tornar compatível com o .NET Standard 2.0. Como resultado, o DotNetBrowser 2.0 suporta o .NET Core 2.2 e o 3.0 no Windows.

A nova versão requer o .NET Framework 4.5 ou superior.

A API é estendida com novas classes, interfaces, métodos, eventos e handlers. Algumas das suas partes foram completamente redesenhadas para tornar impossível a utilização incorreta da biblioteca.

Também reformulamos a arquitetura da biblioteca. Agora é possível executar e controlar o ciclo de vida de várias instâncias do Chromium numa única aplicação .NET. Cada instância do Chromium pode ser configurada com o seu próprio diretório de dados do usuário, porta de depuração remota, idioma, etc. Esta alteração te permite criar e utilizar simultaneamente duas ou mais instâncias de browser absolutamente independentes.

O que há de novo

Arquitetura

A estrutura da nova arquitetura tem o seguinte aspecto:

DotNetBrowser Architecture

Esta atualização introduz novas entidades: IEngine e IFrame. Usando o IEngine você pode acessar a funcionalidade central do mecanismo Chromium. Aqui está como criar uma instância IEngine:

C#

IEngine engine = EngineFactory.Create(new EngineOptions.Builder
{
    RenderingMode = RenderingMode.HardwareAccelerated,
    Language = DotNetBrowser.Ui.Language.German,
    UserDataDirectory = @"C:\Users\Me\DotNetBrowser"
}
.Build());

VB.NET

Dim engine As IEngine = EngineFactory.Create(New EngineOptions.Builder With {
            .RenderingMode = RenderingMode.HardwareAccelerated,
            .Language = DotNetBrowser.Ui.Language.German,
            .UserDataDirectory = "C:\Users\Me\DotNetBrowser"
        }.Build())

Um processo separado do Chromium Main é usado para cada instância do IEngine.

Criar motores

Cada página web carregada num IBrowser tem um IFrame principal. O próprio IFrame pode ter frames filhos. É possível utilizar o IFrame para acessar e trabalhar com DOM e JavaScript. Por exemplo:

C#

browser.MainFrame?.ExecuteJavaScript("document.title = 'Hello';");

VB.NET

browser.MainFrame?.ExecuteJavaScript("document.title = 'Hello';")

Pré-visualização

Com esta versão, você pode apresentar uma caixa de diálogo padrão Print Preview e selecionar as opções de impressão preferidas quando o usuário ou o JavaScript imprime uma página Web:

Pré-visualização da impressão

JavaScript e DOM

Conversão automática de tipos

O JavaScript e o .NET funcionam com tipos primitivos diferentes. O DotNetBrowser 2.0 implementa conversão automática de tipos de JavaScript para tipos .NET e vice-versa. Agora você pode escrever o código como:

C#

string name = mainFrame.ExecuteJavaScript<string>("'Hello'").Result;
double number = mainFrame.ExecuteJavaScript<double>("123").Result;
bool flag = mainFrame.ExecuteJavaScript<bool>("true").Result;
IJsObject window = mainFrame.ExecuteJavaScript<IJsObject>("window").Result;

VB.NET

Dim name As String = mainFrame.ExecuteJavaScript(Of String)("'Hello'").Result
Dim number As Double = mainFrame.ExecuteJavaScript(Of Double)("123").Resultado
Dim flag As Boolean = mainFrame.ExecuteJavaScript(Of Boolean)("true").Resultado
Dim window As IJsObject = mainFrame.ExecuteJavaScript(Of IJsObject)("window").Resultado

Wrappers DOM

A conversão automática de tipos torna possível acessar objetos DOM JavaScript e trabalhar com eles através da API DOM do DotNetBrowser. Por exemplo:

C#

IDocument document = frame.ExecuteJavaScript("document").Result as IDocument;

VB.NET

Dim document As IDocument = TryCast(frame.ExecuteJavaScript("document").Result, IDocument)

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

C#

IJsObject document = frame.ExecuteJavaScript("document").Result as IJsObject;

VB.NET

Dim document As IJsObject = TryCast(frame.ExecuteJavaScript("document").Result, IJsObject)

Rede

Esta versão da biblioteca te permite emular um servidor Web, interceptando todos os request de URL e fornecendo respostas URL personalizadas, tanto de forma síncrona como assíncrona. Eis um exemplo de como interceptar requests e enviar dados de resposta:

C#

network.InterceptRequestHandler =
    new Handler<InterceptRequestParameters, InterceptRequestResponse>(p =>
    {
        UrlRequestJobOptions options = new UrlRequestJobOptions
        {
            Headers = new List<HttpHeader>
            {
                new HttpHeader("Content-Type", "text/plain"),
                new HttpHeader("Content-Type", "charset=utf-8")
            }
        };
        UrlRequestJob job = network.CreateUrlRequestJob(p.UrlRequest, options);

        Task.Run(() =>
        {
            // O processamento do pedido é efectuado numa thread em segundo plano
            // para evitar o congelamento da página Web.
            job.Write(Encoding.UTF8.GetBytes("Meus dados"));
            job.Complete();
        });
        
        return InterceptRequestResponse.Intercept(job);
});

VB.NET

network.InterceptRequestHandler =
    New Handler(Of InterceptRequestParameters, InterceptRequestResponse)(Function(p)
        Dim options = New UrlRequestJobOptions With {
                .Headers = New List(Of HttpHeader) From {
                New HttpHeader("Content-Type", "text/plain"),
                New HttpHeader("Content-Type", "charset=utf-8")
                }
                }
        Dim job As UrlRequestJob = network.CreateUrlRequestJob(p.UrlRequest, options)
        Task.Run(Sub()
            ' O processamento do pedido é efectuado numa thread em segundo plano
            ' para evitar o congelamento da página Web.
            job.Write(Encoding.UTF8.GetBytes("My data"))
            job.Complete()
        End Sub)
        Return InterceptRequestResponse.Intercept(job)
    End Function)

Características exclusivas

H.264, MP4, AAC

Temos o prazer de anunciar que, a partir desta versão, não é mais necessário solicitar uma compilação *c separada com codecs proprietários habilitados para reproduzir os formatos H.264, MP4 e AAC. É possível ativar os codecs proprietários, que por padrão estão desativados, através da API, como mostrado abaixo:

C#

engine = EngineFactory.Create(new EngineOptions.Builder
{
    RenderingMode = renderingMode,
    ProprietaryFeatures = ProprietaryFeatures.H264 | ProprietaryFeatures.Aac
}.Build());

VB.NET

engine = EngineFactory.Create(New EngineOptions.Builder With {
            .RenderingMode = renderingMode,
            .ProprietaryFeatures = ProprietaryFeatures.H264 Or ProprietaryFeatures.Aac
        }.Build())

Os codecs H.264 e AAC são os componentes proprietários. Ao ativar estes codecs, você declara ter conhecimento de que o H.264 e o AAC são componentes proprietários e que deve ter uma licença para utilizá-los. Mais informações podem ser obtidas através dos titulares das patentes: Via Licensing e MPEG LA. A TeamDev não será responsável pela sua utilização dos codecs H.264 e AAC.

Widevine

Agora você pode ativar o componente proprietário denominado Widevine, que permite reproduzir o conteúdo de vídeo/áudio no Netflix, Amazon Prime, Spotify e outros serviços Web que utilizam o Widevine para distribuir conteúdos.

O componente Widevine está desativado por padrão. Utilize o seguinte código para ativá-lo:

C#

engine = EngineFactory.Create(new EngineOptions.Builder
{
    RenderingMode = renderingMode,
    ProprietaryFeatures = ProprietaryFeatures.Widevine
}.Build());

VB.NET

engine = EngineFactory.Create(New EngineOptions.Builder With {
            .RenderingMode = renderingMode,
            .ProprietaryFeatures = ProprietaryFeatures.Widevine
        }.Build())

O Widevine é um componente de propriedade da Google, regido pelos seus próprios termos de utilização. Para mais informações, consultar https://www.widevine.com/.

Favicon

O favicon da página web atualmente carregada agora pode ser acessado através da propriedade IBrowser.Favicon. Existe também o evento IBrowser.FaviconChanged que ocorre quando o favicon da página web é alterado.

Ocultar barras de rolagem

Com esta atualização, você pode ocultar as barras de rolagem utilizando a seguinte abordagem:

C#

browser.Settings.ScrollbarsHidden = true;

VB.NET

browser.Settings.ScrollbarsHidden = True

Uma vez chamado este método, as páginas web carregadas na instância IBrowser não exibirão mais barras de rolagem. É útil para aplicações kiosk e para obter imagens de páginas Web.

Desativar o menu tátil

O EngineOptions tem uma opção adicional que permite desativar o menu tátil nos dispositivos táteis do Windows 10. O seguinte trecho de código demonstra como isso pode ser feito:

C#

IEngine engine = EngineFactory.Create(new EngineOptions.Builder
{
    TouchMenuDisabled = true
}
.Build());

VB.NET

engine = EngineFactory.Create(New EngineOptions.Builder With {
            .TouchMenuDisabled = True
        }.Build())

Características abandonadas

A partir desta versão, o DotNetBrowser não suporta mais o .NET Framework 4.0.

Para lançar o DotNetBrowser 2.0 mais cedo, abandonámos temporariamente várias funcionalidades. Temos planos de fornecer alternativas para eles nas próximas versões.

Como migrar

A API da nova versão principal não é compatível com as versões 1.x anteriores. Se a sua aplicação já utiliza o DotNetBrowser 1.x, consulte este guia de migração para obter instruções detalhadas sobre como alterar o seu código para funcionar com a versão 2.0.

O que vem aí

Faça o download e experimente a nova versão do .NET Framework ou do .NET Core. Aguardamos o seu feedback.

Solicitar licença de avaliação

Go Top