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:
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
.
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:
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.
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.