从 2.6 迁移到 2.7

在本迁移指南中,我们将介绍 2.7 中已删除/更改的 API,以及应该使用的替代方案。

已删除的 API

加载 HTML

v2.6

在某些情况下,可以使用 IFrame.LoadHtml()IFrame.LoadData()加载简单的 HTML 文档。 这就是它的样子:

var html = "<html><head></head><body><h1>Hello world!</h1></body></html>";
browser.MainFrame.LoadHtml(html).Wait();
Dim html = "<html><head></head><body><h1>Hello world!</h1></body></html>"
browser.MainFrame.LoadHtml(html).Wait()

v2.7

安全限制变得更加严格。 因此,当使用 LoadHtml() 加载依赖于外部脚本的 HTML 文档时,它永远不会加载这些脚本,并记录错误信息 Failed to load resource: net::ERR_NOT_IMPLEMENTED。 同样的行为也可以在 HTML 中的图像中观察到。

没有办法在不破坏 Chromium 安全性的情况下修复此行为,这就是 IFrame.LoadHtmlIFrame.LoadData 都从 API 中完全删除的原因。

可能的解决方法是使用 data: 编码 URI,然后使用常规的 LoadUrl 调用加载它。 下面是一个例子:

var html = "<html><head></head><body><h1>Html Encoded in 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 Encoded in URL!</h1></body></html>"
Dim base64EncodedHtml = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
browser.Navigation.LoadUrl("data:text/html;base64," & base64EncodedHtml).Wait()

不过,使用这种解决方法时无法设置基本 URL。

另一种可能的方法是使用处理程序注册一个 Scheme 并拦截相应的请求以提供 HTML。 请参阅相应的文章.

更新的 API

v2.6 之前,在设置 cookie 时需要传递网页 URL:

Cookie cookie = new Cookie.Builder
{
    Name = "name",
    Value = "value",
    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 = "name",
    .Value = "value",
    .DomainName = ".google.com",
    .Path = "/"
}.Build()

Dim success As Boolean = engine.CookieStore.SetCookie("https://www.google.com",cookie).Result
engine.CookieStore.Flush()

v2.7

ICookieStore.SetCookie() 现在没有 URL 参数,因为之前它仅用于验证目的:

Cookie cookie = new Cookie.Builder
{
    Name = "name",
    Value = "value",
    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 = "name",
    .Value = "value",
    .DomainName = ".google.com",
    .Path = "/"
}.Build()

Dim success As Boolean = engine.Profiles.Default.CookieStore.SetCookie(cookie).Result
engine.Profiles.Default.CookieStore.Flush()

此外, ICookieStore.Delete() 现在返回 Task ,而不是 Task<bool>

添加的 API

默认背景颜色

当 Chromium 不知道网页的背景颜色,或者根本未指定颜色时,它使用白色。 在 2.7 版本中,我们通过新功能扩展了 API,允许您配置 Chromium 在这种情况下应使用的默认背景色,而不是默认的白色。

以下代码演示了如何为 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

以文本形式获取框架内容

IFrame.Text 属性以纯文本形式返回框架及其子框架的内容:

string text = browser.MainFrame?.Text;
Dim text As String = browser.MainFrame?.Text

查看页面来源

现在,你可以像在 Google Chrome 浏览器中一样,通过 IFrame.ViewSource 查看已加载网页或框架的源代码:

browser.MainFrame?.ViewSource();
browser.MainFrame?.ViewSource()

上面的代码告诉 Chromium 使用主框架的 HTML 源代码创建并打开一个弹出窗口。

JavaScript Promise 支持

现在,您可以直接使用 JavaScript promises(承诺),而无需在 IJsObject 上创建一个包装器。 例如:

IJsPromise promise = browser.MainFrame
                            .ExecuteJavaScript<IJsPromise>("Promise.resolve(\"test\")")
                            .Result;

// 当 promise 被履行或拒绝时调用一些 .NET 代码。
promise.Then(o => Console.WriteLine("Promise fulfilled"),
             e => Console.WriteLine("Promise rejected"));
Dim promise As IJsPromise = 
    browser.MainFrame
            .ExecuteJavaScript(Of IJsPromise)("Promise.resolve(""test"")")
            .Result

'  当 promise 被履行或拒绝时调用一些 .NET 代码。
promise.Then(Sub(o) Console.WriteLine("Promise fulfilled"), 
             Sub(e) Console.WriteLine("Promise rejected"))

首选配色方案

可以通过浏览器设置强制使用首选配色方案:

// 强制启用深色模式。.
browser.Settings.PreferredColorScheme = PreferredColorScheme.Dark;
// 强制启用浅色模式。
browser.Settings.PreferredColorScheme = PreferredColorScheme.Light;
' 强制启用深色模式。
browser.Settings.PreferredColorScheme = PreferredColorScheme.Dark;
// 强制启用浅色模式。
browser.Settings.PreferredColorScheme = PreferredColorScheme.Light 

遵循 prefers-color-scheme 媒体查询的网站将相应地切换到浅色或深色模式。

Chromium 配置文件支持

每个引擎都有一个默认的 Profile ,您可以通过以下方式访问:

IProfile defaultProfile = engine.Profiles.Default;
Dim defaultProfile As IProfile = engine.Profiles.Default

以下服务现属于 Profile。 您可以独立管理每个配置文件的 cookie、下载、权限、插件等内容:

  • ZoomLevels
  • Plugins
  • Proxy
  • Network
  • SpellChecker
  • CookieStore
  • HttpCache
  • Downloads
  • Permissions

欲了解更多信息,请参阅相应的指南

Go Top