2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
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: 1920x1080WinForms
WPF
-
Intel Core i7 7700HQ 2,8 GHz com GPU NVIDIA GeForce MX150
Dimensão do vídeo: 1920x1080WinForms
WPF
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()
.
Navegação do histórico do Overscroll
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ânciaBrowserView
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)
Siga @DotNetBrowser para obter todas as atualizações da biblioteca.
Assine o nosso RSS feed para receber atualizações instantâneas sobre novos lançamentos.