List icon 目录

Chromium

本指南将介绍如何使用 DotNetBrowser 所使用的 Chromium 构建。

使用 DotNetBrowser 不需要在目标环境中安装 Chromium 或 Google Chrome 浏览器,因为它使用并部署了自己的 Chromium 构建。

二进制文件 

每个支持平台的 Chromium 二进制文件都位于相应的 DotNetBrowser 动态链接库中:

  • DotNetBrowser.Chromium.Win-x86.dll – 适用于 Windows 32 位的 Chromium 二进制文件。
  • DotNetBrowser.Chromium.Win-x64.dll – 适用于 Windows 64 位的 Chromium 二进制文件。
  • DotNetBrowser.Chromium.Win-arm64.dll – 适用于 Windows ARM64 的 Chromium 二进制文件。
  • DotNetBrowser.Chromium.Linux-x64.dll – 适用于 Linux 64 位的 Chromium 二进制文件。
  • DotNetBrowser.Chromium.Linux-arm64.dll – 适用于 Linux ARM64 的 Chromium 二进制文件。
  • DotNetBrowser.Chromium.macOS-x64.dll – 适用于 macOS 64 位的 Chromium 二进制文件。
  • DotNetBrowser.Chromium.macOS-arm64.dll – 适用于 macOS ARM64 (Apple Silicon) 的 Chromium 二进制文件。

要使用 Chromium,需要提取其二进制文件。

提取 

DotNetBrowser 会在首次启动时从相应的 DLL 中提取目标平台的 Chromium 二进制文件。

在 Windows 中,它们被放置在 %LocalAppData%\Temp\dotnetbrowser-chromium 目录中。

在 macOS 和 Linux 中,二进制文件被提取到用户的临时目录中。

DotNetBrowser 会检查目录中是否包含所需的 Chromium 文件。如果未找到文件,它会从应用程序中引用的 DLL 中提取二进制文件。

您可以自定义提取二进制文件的默认路径,或者通过编程方式提取二进制文件并告诉库它们的位置:

C#
VB
EngineOptions options = new EngineOptions.Builder
{
    ChromiumDirectory = @"C:\Users\Me\.DotNetBrowser"
}
.Build();
binariesExtractor = new ChromiumBinariesExtractor();
binariesExtractor.ExtractBinariesIfNecessary(options);
// ...
engine = EngineFactory.Create(options);
Dim options = New EngineOptions.Builder With 
{
    .ChromiumDirectory = "C:\Users\Me\.DotNetBrowser\chromium"
}.Build()
Dim binariesExtractor = New ChromiumBinariesExtractor()
binariesExtractor.ExtractBinariesIfNecessary(options)
' ...
engine = EngineFactory.Create(options)

Chromium 版本 

您可以通过 ChromiumInfo.Version 常量值获取当前版本的 DotNetBrowser 使用的 Chromium 版本信息。该字段允许您以编程方式在您的项目中返回 Chromium engine 的版本。

位置 

您可以在构造 IEngine 时使用 EngineOptions 指定 Chromium 二进制文件目录的路径,如下面的代码示例所示:

C#
VB
IEngine engine = EngineFactory.Create(new EngineOptions.Builder
{
    ChromiumDirectory = @"C:\Users\Me\.DotNetBrowser\chromium"
}
.Build());
Dim engine As IEngine = EngineFactory.Create(New EngineOptions.Builder With 
{
    .ChromiumDirectory = "C:\Users\Me\.DotNetBrowser\chromium"
}.Build())

路径可以是相对的或绝对的。

如果目录中已经有所需的 Chromium 二进制文件,库将不会执行提取。

如果目录损坏且某些 Chromium 文件丢失,DotNetBrowser 将提取二进制文件并覆盖现有文件。

验证 

每个 DotNetBrowser 版本只与它自己的 Chromium 二进制文件兼容。特定版本的二进制文件不支持其他 DotNetBrowser 版本。

为确保 Chromium 二进制文件与当前 DotNetBrowser 版本兼容,该库会对二进制文件进行验证。

开关 

Chromium 可通过命令行 开关改变功能行为、帮助调试或开启实验功能。

DotNetBrowser 不支持所有 Chromium 开关。因此,我们建议使用 Engine 选项而不是开关(switches)来配置 Chromium。

沙盒 

DotNetBrowser 在 Windows、Linux 和 macOS 上支持 Chromium Sandbox(沙箱)。 沙箱默认启用,为 Chromium 子进程提供重要的隔离和安全保障。

你可以通过相应的 IEngine 选项来禁用沙箱:

C#
VB
engine = EngineFactory.Create(new EngineOptions.Builder 
{
    SandboxDisabled  = true
}
.Build());
engine = EngineFactory.Create(New EngineOptions.Builder With 
{
    .SandboxDisabled = True
}.Build())

禁用沙箱会显著降低安全性。如果你的应用程序加载不受信任的 HTML(例如来自外部来源或用户生成的内容),请不要禁用沙箱。 否则,可能会使你的系统面临严重的安全风险。

Linux 

Chromium 依赖 user namespaces 来对其子进程进行沙箱隔离。 当该功能不可用时,DotNetBrowser 无法启动 Chromium,并会在 IEngine 初始化过程中抛出 EngineInitializationException

在 Debian 10 中,默认情况下非特权用户无法使用 user namespaces。 Ubuntu 也支持通过内核参数来启用或禁用该功能。 在这些系统上,你可以通过以下方式启用 user namespaces:

sudo sysctl -w kernel.unprivileged_userns_clone=1
echo 'kernel.unprivileged_userns_clone=1' | sudo tee -a /etc/sysctl.d/99-enable-unprivileged-userns.conf

在 Ubuntu 23.10 及更高版本 中,user namespaces 进一步受到 AppArmor 的限制。 要放宽此限制,请配置以下参数:

sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
echo 'kernel.apparmor_restrict_unprivileged_userns=0' | sudo tee -a /etc/sysctl.d/99-enable-unprivileged-userns.conf

其他 Linux 发行版默认启用了 user namespaces,因此不需要额外配置。

如果你无法修改环境配置以启用 user namespaces,可以选择 禁用 Chromium 沙箱。 但这种方式会显著降低安全性,应仅作为最后的手段考虑。

Chrome 扩展插件 

DotNetBrowser 不支持专为 Chrome 应用程序设计的扩展。

该库仅与渲染网页内容的网页浏览器控件集成。因此,它没有集成扩展所需的 Chrome GUI,以及工具栏和上下文菜单等元素。