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(). Eis o seu aspecto:

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

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.

Go Top