Introdução
Instalação
Guias
- Engine
- Perfil
- Navegador
- BrowserView
- Navegação
- Conteúdo
- Menu de contexto
- DOM
- JavaScript
- Pop-ups
- Diálogos
- Downloads
- Chrome extensions
- Rede
- Cache
- Cookies
- Proxy
- Autenticação
- Permissões
- Plugins
- Impressão
- Senhas
- Perfis de dados do usuário
- Cartões de crédito
- Mídia
- Zoom
- Corretor ortográfico
- Implantação
- Chromium
Resolução de problemas
- Registro
- Exceções comuns
- A aplicação não termina
- O vídeo não é reproduzido
- Não é possível iniciar sessão na conta Google
- Os dados do usuário não são armazenados
- Esquema de cores
- Falha no início
- Início lento no Windows
- Aplicação .NET que não responde
- Encerramento inesperado do processo Chromium
- Comportamento inesperado
- Fim do suporte do Windows 7/8/8.1
Migração
Migração da versão 2.6 para a 2.7
Neste guia de migração, descrevemos qual a API que foi removida/alterada na versão 2.7 e quais as alternativas que deve utilizar.
API removida
Carregamento de HTML
v2.6
Em certos casos, era possível carregar um documento HTML simples utilizando as funções IFrame.LoadHtml()
ou IFrame.LoadData()
. Aqui temos como ele se parece:
var html = "<html><head></head><body><h1>Olá mundo!</h1></body></html>";
browser.MainFrame.LoadHtml(html).Wait();
Dim html = "<html><head></head><body><h1>Olá mundo!</h1></body></html>"
browser.MainFrame.LoadHtml(html).Wait()
v2.7
As restrições de segurança tornaram-se mais rigorosas. Como resultado, quando um documento HTML que depende de scripts externos é carregado utilizando LoadHtml()
, ele nunca carrega esses scripts e registra erros dizendo Failed to load resource: net::ERR_NOT_IMPLEMENTED
. O mesmo comportamento também pode ser observado com imagens em HTML.
Não há forma de corrigir este comportamento sem quebrar a segurança do Chromium, e é por isso que tanto IFrame.LoadHtml
como IFrame.LoadData
foram completamente removidos da API.
A solução possível é utilizar data:
encoded URI e depois carregá-lo utilizando a chamada LoadUrl normal. Eis um exemplo:
var html = "<html><head></head><body><h1>Html codificado no URL!</h1></body></html>";
var base64EncodedHtml = Convert.ToBase64String(Encoding.UTF8.GetBytes(html));
browser.Navigation.LoadUrl("data:text/html;base64," + base64EncodedHtml).Wait();
Dim html = "<html><head></head><body><h1>Html codificado no URL!</h1></body></html>"
Dim base64EncodedHtml = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
browser.Navigation.LoadUrl("data:text/html;base64," & base64EncodedHtml).Wait()
No entanto, o URL de base não pode ser definido quando se utiliza esta solução alternativa.
Outra abordagem possível é registrar um Scheme
com um handler e interceptar o pedido correspondente para fornecer o HTML. Veja o artigo correspondente.
API atualizada
Armazenamento de Cookie
v2.6 Anteriormente, era necessário passar o URL da página web ao definir um cookie:
Cookie cookie = new Cookie.Builder
{
Name = "nome",
Value = "valor",
DomainName = ".google.com",
Path = "/"
}.Build();
bool success = engine.CookieStore.SetCookie("https://www.google.com",cookie).Result;
engine.CookieStore.Flush();
Dim cookie As Cookie = New Cookie.Builder With {
.Name = "nome",
.Value = "valor",
.DomainName = ".google.com",
.Path = "/"
}.Build()
Dim success As Boolean = engine.CookieStore.SetCookie("https://www.google.com",cookie).Result
engine.CookieStore.Flush()
v2.7
O ICookieStore.SetCookie()
não tem agora qualquer parâmetro URL, uma vez que era anteriormente utilizado apenas para efeitos de validação:
Cookie cookie = new Cookie.Builder
{
Name = "nome",
Value = "valor",
DomainName = ".google.com",
Path = "/"
}.Build();
bool success = engine.Profiles.Default.CookieStore.SetCookie(cookie).Result;
engine.Profiles.Default.CookieStore.Flush();
Dim cookie As Cookie = New Cookie.Builder With {
.Name = "nome",
.Value = "valor",
.DomainName = ".google.com",
.Path = "/"
}.Build()
Dim success As Boolean = engine.Profiles.Default.CookieStore.SetCookie(cookie).Result
engine.Profiles.Default.CookieStore.Flush()
Além disso, o ICookieStore.Delete()
devolve agora uma Task
em vez de Task<bool>
.
API adicionada
Cor de fundo predefinida
Quando o Chromium não sabe a cor de fundo de uma página Web, ou a cor não foi especificada em momento algum, ele utiliza a cor branca. Na versão 2.7, alargámos a API com uma nova funcionalidade que lhe permite configurar a cor de fundo predefinida que o Chromium deve utilizar em vez da cor branca predefinida nesses casos.
O código a seguir demonstra como definir a cor de fundo desejada para a página about:blank:
Color purple = new Color(0.6f, 0.3f, 0.6f);
browser.Settings.DefaultBackgroundColor = purple;
Dim purple As New Color(0.6F, 0.3F, 0.6F)
browser.Settings.DefaultBackgroundColor = purple
Obter o conteúdo do frame como texto
A propriedade IFrame.Text
devolve o conteúdo do frame e dos seus subframes como texto simples:
string text = browser.MainFrame?.Text;
Dim text As String = browser.MainFrame?.Text
Ver fonte da página
Agora você pode ver a fonte da página Web ou do frame carregado, como no Google Chrome, através de IFrame.ViewSource
:
browser.MainFrame?.ViewSource();
browser.MainFrame?.ViewSource()
O código acima diz ao Chromium para criar e abrir uma nova janela pop-up com a fonte HTML do frame principal.
Suporte a Promise
do JavaScript
Agora você pode trabalhar diretamente com as promessas JavaScript sem necessidade de criar um wrapper em IJsObject
. Por exemplo:
IJsPromise promise = browser.MainFrame
.ExecuteJavaScript<IJsPromise>("Promise.resolve(\"test\")")
.Result;
// Invoca algum código .NET quando a promessa é cumprida ou rejeitada.
promise.Then(o => Console.WriteLine("Promessa cumprida"),
e => Console.WriteLine("Promessa rejeitada"));
Dim promise As IJsPromise =
browser.MainFrame
.ExecuteJavaScript(Of IJsPromise)("Promise.resolve(""test"")")
.Result
' Invoca algum código .NET quando a promessa é cumprida ou rejeitada.
promise.Then(Sub(o) Console.WriteLine("Promessa cumprida"),
Sub(e) Console.WriteLine("Promessa rejeitada"))
Esquema de cores preferido
É possível forçar o esquema de cores preferido através das definições do navegador:
// Força o modo escuro.
browser.Settings.PreferredColorScheme = PreferredColorScheme.Dark;
// Força o modo claro.
browser.Settings.PreferredColorScheme = PreferredColorScheme.Light;
' Força o modo escuro.
browser.Settings.PreferredColorScheme = PreferredColorScheme.Dark
' Força o modo claro.
browser.Settings.PreferredColorScheme = PreferredColorScheme.Light
Os sites Web que respeitam a consulta multimídia prefers-color-scheme
mudarão para o modo claro ou escuro em conformidade.
Suporte para perfis Chromium
Cada engine tem um perfil Profile
padrão o qual você pode acessar através do:
IProfile defaultProfile = engine.Profiles.Default;
Dim defaultProfile As IProfile = engine.Profiles.Default
Os serviços abaixo indicados pertencem agora ao Profile
. Você pode gerir cookies, downloads, permissões, plugins, etc. de forma independente para cada perfil:
Níveis de zoom
Plugins
Proxy
Rede
Corretor ortográfico
Loja de cookies
HttpCache
Downloads
Permissões
Para mais informações, consulte o guia correspondente.