Publicado em 9 de setembro de 2020

DotNetBrowser 2.2

Nesta atualização, melhoramos o desempenho de renderização no modo de renderização fora da tela, restauramos a funcionalidade que permite desativar o tráfego interno do Chromium e estendemos as suas opções de gestão de dados e de interação do usuário com o navegador.

O que há de novo

Desempenho de renderização

O desempenho da renderização fora da tela foi melhorado em todas as plataformas e kits de ferramentas de IU suportados.

Os resultados dos testes de desempenho de renderização nas diferentes plataformas num vídeo HTML5 em Frame Per Second (FPS) são os seguintes:

  • Intel Core i5 8400H 2,5 GHz com vídeo integrado Intel UHD Graphics 630
    Dimensão do vídeo: 1920x1080

    WinForms

    Windows WinForms FPS

    WPF

    Windows WPF FPS

  • Intel Core i7 7700HQ 2,8 GHz com GPU NVIDIA GeForce MX150
    Dimensão do vídeo: 1920x1080

    WinForms

    Windows WinForms FPS

    WPF

    Windows WPF FPS

Tráfego do Chromium

Agora é possível poupar o tráfego desnecessário para serviços Chromium como o Google Cloud Messaging, Translate Ranker, Extensions Updater, Safe Browsing, etc. Estes serviços estão relacionados com as funcionalidades que não são atualmente suportadas pelo DotNetBrowser.

Pode ser feito da seguinte forma:

EngineOptions engineOptions = new EngineOptions.Builder
{
    GoogleTrafficDisabled = true
}.Build();

Desativar o visualizador de PDF

Agora você pode escolher se deseja apresentar documentos PDF no Visualizador de PDF ou baixá-los. Por padrão, eles serão apresentados no Visualizador de PDF. Veja aqui como mudar para a opção de download de PDFs:

Engine.Plugins.Settings.PdfViewerEnabled = false;

Limpar o cache HTTP

Com esta atualização, você passa a ter mais controle sobre a utilização da memória. Agora você pode selecionar todas as entradas de cache HTTP armazenadas no disco e na memória para exclusão.

Importante: O método IHttpCache.ClearDiskCache() está marcado como Obsolete e será removido em uma das próximas versões. Em vez disso, utilize o método IHttpCache.Clear().

O DotNetBrowser agora permite voltar/avançar com um deslize para a esquerda/direita em dispositivos com tela tátil. Por padrão, a navegação de deslocamento superior está desativada. Você pode ativá-la da seguinte forma:

Browser.Settings.OverscrollHistoryNavigationEnabled = true;

Elemento DOM focado

Agora é possível obter o elemento DOM atualmente em foco no documento. Aqui um exemplo:

IElement focusedElement = Browser.MainFrame.Document.FocusedElement;

Ordem das mensagens IPC

Nas versões anteriores, a ordem das mensagens de IPC podia ser alterada quando qualquer manipulador era invocado. Por exemplo, a ativação do método de eventos de teclado quando um handler é invocado pode levar a um problema quando o campo de texto numa página Web contém letras misturadas aleatoriamente.

Explicação: quando um handler é invocado, iniciamos um ciclo aninhado que processa as mensagens IPC recebidas. O problema é que existe uma janela entre o momento em que entramos no método que invoca o handler e o momento em que iniciamos efetivamente o ciclo aninhado. Como resultado, podemos ter uma situação em que algumas das mensagens recebidas são colocadas na fila de discussão do Chromium e essas mensagens só serão processadas depois que o método retornar. Ao mesmo tempo, as mensagens que chegam quando o ciclo aninhado é iniciado serão processadas antes de o método regressar, o que afeta a ordem pela qual as mensagens foram enviadas.

Nesta versão, melhoramos a lógica interna do IPC para nos livrarmos de tais situações. Esta melhoria introduz um requisito importante sobre a forma como você deve processar o código dentro de um handler. Se executar alguma lógica que faça chamadas síncronas à biblioteca numa thread separada dentro de um handler e bloquear o handler à espera até que a lógica tenha sido executada, poderá ter um deadlock. Por exemplo:

// Registra um handler.
browser.SomeHandler = new Handler<Parameters, Response>(p => 
{
    // Invoca alguma lógica em uma thread separada e bloqueia a execução da thread
    // atual até que a lógica tenha sido executada.
    InvokeInSeparateThreadAndWait(() => 
    {
        // Invoca um método síncrono.
        browser.SomeSyncMethod(); // <-- Deadlock: este método nunca retornará.
    });
    return Response.Proceed();
});

Para evitar possíveis deadlocks, utilize a seguinte abordagem:

// Registar um manipulador.
browser.SomeHandler = new Handler<Parameters, Response>(p => 
{
    // Invocar um método de bloqueio.
    browser.SomeSyncMethod();
    return Response.Proceed();
});

Melhorias

Nas versões anteriores, o mesmo diretório de dados do usuário é utilizado para todas as instâncias IEngine que não tenham um diretório de dados do usuário personalizado especificado. Este diretório continha normalmente dados previamente guardados, tais como definições de proxy, cookies, cache, etc.

Nesta versão, é criado um diretório de dados do usuário temporário separado sempre que é criada uma instância IEngine sem especificar o diretório de dados do usuário personalizado. Este diretório é eliminado automaticamente durante a eliminação da instância IEngine.

Problemas corrigidos

  • Os cabeçalhos HTTP substituídos estão a causar o erro ‘400 Bad Request’.
  • O erro ArgumentException ao mover um formulário filho com instância BrowserView para fora do formulário principal do WinForms usando o modo de renderização acelerada por hardware.
  • A funcionalidade SpellChecker não funcionando após a migração para o Chromium 79.
  • A segunda instância BrowserView não mostrando a página web quando se utiliza o modo de renderização acelerada por hardware em aplicações WinForms.
  • A obtenção de um nó DOM a partir do XPathResult leva a um bloqueio.
  • Valor IKeyTypedEventArgs.VirtualKey incorreto ao usar o modo de renderização acelerada por hardware.
  • O erro NullReferenceException quando o tipo MIME não está definido na chamada de retorno OnHeadersReceived.
  • A janela pop-up não sendo fechada corretamente.

Solicitar licença de avaliação
Baixar DotNetBrowser 2.2 (.NET Framework)
Baixar DotNetBrowser 2.2 (.NET Core)

Go Top