怎么使用CefSharp在C# App中嵌入Chrome浏览器

发布时间:2021-11-10 17:24:42 作者:柒染
来源:亿速云 阅读:509

怎么使用CefSharp在C# App中嵌入Chrome浏览器

在现代应用程序开发中,嵌入一个功能强大的浏览器控件是非常常见的需求。无论是为了显示网页内容、实现Web与本地应用的交互,还是为了构建混合应用,浏览器控件都扮演着重要的角色。CefSharp 是一个基于 Chromium Embedded Framework (CEF) 的开源项目,它允许开发者在 .NET 应用程序中嵌入 Chrome 浏览器。本文将详细介绍如何在 C# 应用程序中使用 CefSharp 嵌入 Chrome 浏览器。

1. CefSharp 简介

CefSharp 是一个基于 Chromium 的 .NET 库,它允许开发者在 C# 应用程序中嵌入 Chrome 浏览器。CefSharp 提供了丰富的 API,使得开发者可以轻松地在应用程序中加载网页、处理 JavaScript、与网页进行交互等。

CefSharp 的主要特点包括:

2. 环境准备

在开始使用 CefSharp 之前,我们需要确保开发环境已经准备好。以下是所需的工具和库:

2.1 安装 CefSharp

首先,我们需要在项目中安装 CefSharp。可以通过 NuGet 包管理器来安装 CefSharp。打开 Visual Studio,右键点击项目,选择“管理 NuGet 包”,然后搜索并安装以下包:

安装完成后,NuGet 会自动下载并安装 CefSharp 及其依赖项。

3. 在 WinForms 中嵌入 Chrome 浏览器

3.1 创建 WinForms 项目

首先,创建一个新的 WinForms 项目。打开 Visual Studio,选择“文件” -> “新建” -> “项目”,然后选择“Windows 窗体应用 (.NET Framework)” 或 “Windows 窗体应用 (.NET Core)”。

3.2 添加 CefSharp 控件

在项目中,打开 Form1.cs 文件,然后在 Form1 类中添加以下代码:

using CefSharp;
using CefSharp.WinForms;
using System;
using System.Windows.Forms;

namespace CefSharpDemo
{
    public partial class Form1 : Form
    {
        private ChromiumWebBrowser browser;

        public Form1()
        {
            InitializeComponent();
            InitializeBrowser();
        }

        private void InitializeBrowser()
        {
            Cef.Initialize(new CefSettings());
            browser = new ChromiumWebBrowser("https://www.google.com")
            {
                Dock = DockStyle.Fill,
            };
            this.Controls.Add(browser);
        }
    }
}

3.3 运行应用程序

编译并运行应用程序,你将看到一个嵌入在 WinForms 窗口中的 Chrome 浏览器,加载了 Google 首页。

4. 在 WPF 中嵌入 Chrome 浏览器

4.1 创建 WPF 项目

首先,创建一个新的 WPF 项目。打开 Visual Studio,选择“文件” -> “新建” -> “项目”,然后选择“WPF 应用 (.NET Framework)” 或 “WPF 应用 (.NET Core)”。

4.2 添加 CefSharp 控件

在项目中,打开 MainWindow.xaml 文件,然后在 Grid 中添加以下代码:

<Window x:Class="CefSharpWpfDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:cefSharp="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <cefSharp:ChromiumWebBrowser x:Name="browser" Address="https://www.google.com" />
    </Grid>
</Window>

接下来,打开 MainWindow.xaml.cs 文件,然后在 MainWindow 类中添加以下代码:

using CefSharp;
using System.Windows;

namespace CefSharpWpfDemo
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Cef.Initialize(new CefSettings());
        }
    }
}

4.3 运行应用程序

编译并运行应用程序,你将看到一个嵌入在 WPF 窗口中的 Chrome 浏览器,加载了 Google 首页。

5. 处理 JavaScript 交互

CefSharp 提供了强大的 JavaScript 交互功能,允许你在 C# 代码中调用 JavaScript 函数,或者在 JavaScript 中调用 C# 方法。

5.1 在 C# 中调用 JavaScript

要在 C# 中调用 JavaScript 函数,可以使用 ChromiumWebBrowserExecuteScriptAsync 方法。例如:

browser.ExecuteScriptAsync("alert('Hello from C#!');");

5.2 在 JavaScript 中调用 C

要在 JavaScript 中调用 C# 方法,首先需要在 C# 中注册一个对象,然后在 JavaScript 中通过该对象调用方法。例如:

public class BoundObject
{
    public void ShowMessage(string message)
    {
        MessageBox.Show(message);
    }
}

// 在初始化浏览器时注册对象
browser.JavascriptObjectRepository.Register("boundObject", new BoundObject(), isAsync: true, options: BindingOptions.DefaultBinder);

在 JavaScript 中,可以通过以下方式调用 C# 方法:

boundObject.showMessage('Hello from JavaScript!');

6. 处理浏览器事件

CefSharp 提供了丰富的事件处理机制,允许你监听浏览器的各种事件,例如页面加载完成、JavaScript 执行错误等。

6.1 监听页面加载完成事件

要监听页面加载完成事件,可以使用 FrameLoadEnd 事件。例如:

browser.FrameLoadEnd += (sender, args) =>
{
    if (args.Frame.IsMain)
    {
        MessageBox.Show("Page loaded!");
    }
};

6.2 处理 JavaScript 错误

要处理 JavaScript 错误,可以使用 JavascriptMessageReceived 事件。例如:

browser.JavascriptMessageReceived += (sender, args) =>
{
    if (args.Message is string message)
    {
        MessageBox.Show("JavaScript error: " + message);
    }
};

7. 处理多进程架构

CefSharp 默认使用多进程架构,这意味着浏览器的主进程和渲染进程是分开的。这种架构可以提高浏览器的稳定性和性能,但也带来了一些复杂性。

7.1 处理子进程

CefSharp 会自动处理子进程的启动和管理。如果你需要自定义子进程的行为,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    BrowserSubprocessPath = "path_to_your_subprocess_executable"
};
Cef.Initialize(settings);

7.2 处理跨进程通信

在多进程架构下,CefSharp 提供了 CefSharp.IBrowserProcessHandler 接口来处理跨进程通信。你可以实现该接口来处理浏览器进程和渲染进程之间的通信。

8. 处理资源加载

CefSharp 允许你拦截和处理浏览器的资源加载请求。你可以通过实现 IRequestHandler 接口来拦截请求,并根据需要修改或阻止请求。

8.1 拦截请求

要拦截请求,可以实现 IRequestHandler 接口,并在 OnBeforeResourceLoad 方法中处理请求。例如:

public class CustomRequestHandler : IRequestHandler
{
    public bool OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
    {
        if (request.Url.StartsWith("https://www.example.com"))
        {
            // 阻止请求
            return true;
        }
        return false;
    }
}

// 在初始化浏览器时设置自定义请求处理器
browser.RequestHandler = new CustomRequestHandler();

8.2 处理资源加载完成

要处理资源加载完成事件,可以实现 IRequestHandler 接口,并在 OnResourceLoadComplete 方法中处理事件。例如:

public class CustomRequestHandler : IRequestHandler
{
    public void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
    {
        if (request.Url.StartsWith("https://www.example.com"))
        {
            MessageBox.Show("Resource loaded: " + request.Url);
        }
    }
}

9. 处理浏览器设置

CefSharp 提供了丰富的设置选项,允许你自定义浏览器的行为。你可以通过 CefSettingsChromiumWebBrowser 的属性来进行设置。

9.1 设置代理

要设置代理,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    Proxy = new ProxyOptions
    {
        Mode = ProxyMode.FixedServers,
        Server = "http://proxy.example.com:8080"
    }
};
Cef.Initialize(settings);

9.2 设置用户代理

要设置用户代理,可以通过 ChromiumWebBrowser 的属性进行配置。例如:

browser.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36";

10. 处理浏览器缓存

CefSharp 允许你自定义浏览器的缓存行为。你可以通过 CefSettings 进行配置。

10.1 设置缓存路径

要设置缓存路径,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    CachePath = "path_to_cache_directory"
};
Cef.Initialize(settings);

10.2 清除缓存

要清除缓存,可以使用 Cef.GetGlobalRequestContext().ClearCacheAsync() 方法。例如:

await Cef.GetGlobalRequestContext().ClearCacheAsync();

11. 处理浏览器插件

CefSharp 支持加载和使用浏览器插件。你可以通过 CefSettings 进行配置。

11.1 加载插件

要加载插件,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    PluginPath = "path_to_plugin_directory"
};
Cef.Initialize(settings);

11.2 禁用插件

要禁用插件,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    DisablePlugins = true
};
Cef.Initialize(settings);

12. 处理浏览器扩展

CefSharp 支持加载和使用浏览器扩展。你可以通过 CefSettings 进行配置。

12.1 加载扩展

要加载扩展,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    ExtensionPath = "path_to_extension_directory"
};
Cef.Initialize(settings);

12.2 禁用扩展

要禁用扩展,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    DisableExtensions = true
};
Cef.Initialize(settings);

13. 处理浏览器安全

CefSharp 提供了丰富的安全设置选项,允许你自定义浏览器的安全行为。你可以通过 CefSettingsChromiumWebBrowser 的属性来进行设置。

13.1 设置安全策略

要设置安全策略,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    SecurityPolicy = SecurityPolicy.Strict
};
Cef.Initialize(settings);

13.2 处理 SSL 错误

要处理 SSL 错误,可以实现 IRequestHandler 接口,并在 OnCertificateError 方法中处理错误。例如:

public class CustomRequestHandler : IRequestHandler
{
    public bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
    {
        // 处理 SSL 错误
        return true; // 返回 true 表示忽略错误
    }
}

14. 处理浏览器性能

CefSharp 提供了丰富的性能设置选项,允许你自定义浏览器的性能行为。你可以通过 CefSettingsChromiumWebBrowser 的属性来进行设置。

14.1 设置渲染模式

要设置渲染模式,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    WindowlessRenderingEnabled = true
};
Cef.Initialize(settings);

14.2 处理 GPU 加速

要处理 GPU 加速,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    DisableGpuAcceleration = true
};
Cef.Initialize(settings);

15. 处理浏览器调试

CefSharp 提供了丰富的调试工具,允许你调试浏览器的行为。你可以通过 CefSettingsChromiumWebBrowser 的属性来进行设置。

15.1 启用远程调试

要启用远程调试,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    RemoteDebuggingPort = 9222
};
Cef.Initialize(settings);

15.2 使用 DevTools

要使用 DevTools,可以通过 ChromiumWebBrowser 的属性进行配置。例如:

browser.ShowDevTools();

16. 处理浏览器生命周期

CefSharp 提供了丰富的生命周期事件,允许你监听浏览器的启动、关闭等事件。你可以通过 CefSettingsChromiumWebBrowser 的属性来进行设置。

16.1 监听浏览器启动事件

要监听浏览器启动事件,可以使用 Cef.Initialize 方法。例如:

Cef.Initialize(new CefSettings(), performDependencyCheck: true, browserProcessHandler: new CustomBrowserProcessHandler());

16.2 监听浏览器关闭事件

要监听浏览器关闭事件,可以使用 Cef.Shutdown 方法。例如:

Cef.Shutdown();

17. 处理浏览器多语言支持

CefSharp 支持多语言,允许你自定义浏览器的语言行为。你可以通过 CefSettings 进行配置。

17.1 设置语言

要设置语言,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    Locale = "zh-CN"
};
Cef.Initialize(settings);

17.2 处理多语言资源

要处理多语言资源,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    ResourcesDirPath = "path_to_resources_directory"
};
Cef.Initialize(settings);

18. 处理浏览器多实例

CefSharp 支持多实例,允许你在同一个应用程序中创建多个浏览器实例。你可以通过 CefSettingsChromiumWebBrowser 的属性来进行设置。

18.1 创建多个浏览器实例

要创建多个浏览器实例,可以通过 ChromiumWebBrowser 的构造函数进行创建。例如:

var browser1 = new ChromiumWebBrowser("https://www.google.com");
var browser2 = new ChromiumWebBrowser("https://www.bing.com");

18.2 处理多实例资源

要处理多实例资源,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    MultiThreadedMessageLoop = true
};
Cef.Initialize(settings);

19. 处理浏览器多窗口

CefSharp 支持多窗口,允许你在同一个应用程序中创建多个浏览器窗口。你可以通过 CefSettingsChromiumWebBrowser 的属性来进行设置。

19.1 创建多个浏览器窗口

要创建多个浏览器窗口,可以通过 ChromiumWebBrowser 的构造函数进行创建。例如:

var browser1 = new ChromiumWebBrowser("https://www.google.com");
var browser2 = new ChromiumWebBrowser("https://www.bing.com");

19.2 处理多窗口资源

要处理多窗口资源,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    WindowlessRenderingEnabled = true
};
Cef.Initialize(settings);

20. 处理浏览器多标签

CefSharp 支持多标签,允许你在同一个应用程序中创建多个浏览器标签。你可以通过 CefSettingsChromiumWebBrowser 的属性来进行设置。

20.1 创建多个浏览器标签

要创建多个浏览器标签,可以通过 ChromiumWebBrowser 的构造函数进行创建。例如:

var browser1 = new ChromiumWebBrowser("https://www.google.com");
var browser2 = new ChromiumWebBrowser("https://www.bing.com");

20.2 处理多标签资源

要处理多标签资源,可以通过 CefSettings 进行配置。例如:

var settings = new CefSettings
{
    MultiThreadedMessageLoop = true
};
Cef.Initialize(settings);

21. 处理浏览器多进程

CefSharp 支持多进程,允许你在同一个应用程序中创建多个浏览器进程。你可以通过 CefSettingsChromiumWebBrowser 的属性来进行设置。

21.1 创建多个浏览器进程

要创建多个浏览器进程,可以通过 ChromiumWebBrowser 的构造函数进行创建。例如:

”`csharp var browser

推荐阅读:
  1. cefsharp怎么构建cesium的c#客户端
  2. WinForm webbrowser控件的使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

cefsharp chrome

上一篇:如何使用Roslyn编译器服务

下一篇:Django中的unittest应用是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》