赞
踩
一、介绍
这个东西我以前没有接触过,但是公司项目里面有用到这个东西,所以就顺便研究一下。今天只是做了 WinForm 的测试,有时间了在试试 WPF 是如何实现的。刚开始一塌糊涂,有点麻烦,慢慢的理清了,其实也不是很难。
二、开发步骤
1、下载和安装程序集
当前程序集最新的版本是69.0.0,如果想直接下载程序集的 DLL ,可以通过该地址进行下载 https://www.nuget.org/packages/CefSharp.WinForms/69.0.0。说明一下,以后的版本有可能会变,具体的地址也有可能会变。可以通过nuget轻松获得所有的依赖库。如果的你的网络不好,可以先下载,然后再在项目中添加引用。 效果如图:
如果是使用 Windows 操作系统,开发 WinForm 应用,我们可以使用 NuGet 程序包进行安装:
复制代码
1 PM> Install-Package CefSharp.WinForms -Version 69.0.0
2
3 NET CLI:
4
5 >dotnet add package CefSharp.WinForms --version 69.0.0
6
7 Paket CLI:
8
9 >paket add CefSharp.WinForms --version 69.0.0
复制代码
2、代码实现
1)主窗体实现:
主窗体如图:
主窗体代码:
复制代码
1 using CefSharp.WinForms;
2 using System.Windows.Forms;
3
4 namespace ChromiumWebBrowserForWindowsForms
5 {
6 public partial class frmBrower : Form
7 {
8 private ChromiumWebBrowser webBrowser;
9
10 public frmBrower()
11 {
12 InitializeComponent();
13 this.Load += Form1_Load;
14 }
15
16 private void Form1_Load(object sender, System.EventArgs e)
17 {
18 webBrowser = new ChromiumWebBrowser("www.cnblog.com");
19 webBrowser.Dock = DockStyle.Fill;
20 this.pnlContainer.Controls.Add(webBrowser);
21 webBrowser.Load("www.cnblogs.com");
22 }
23
24 private void btnEnter_Click(object sender, System.EventArgs e)
25 {
26 ChildForm child =www.haomem178.cn new ChildForm(txtUrl.Text);
27 child.Show();
28 }
29 }
30 }
复制代码
2)子窗体实现:
子窗体如图:
代码实现:
复制代码
1 using CefSharp.WinForms;
2 using System;
3 using System.Windows.Forms;
4
5 namespace ChromiumWebBrowserForWindowsForms
6 {
7 public partial class ChildForm : Form
8 {
9 private ChromiumWebBrowser webBrowser;
10 private string url;
11 public ChildForm()
12 {
13 InitializeComponent();
14 this.Load += ChildForm_Load;
15 }
16
17 public ChildForm(string text):this()
18 {
19 url = text;
20 }
21
22 private void ChildForm_Load(object sender, EventArgs e)
23 {
24 webBrowser = new ChromiumWebBrowser(null);
25 webBrowser.Dock = DockStyle.Fill;
26 this.Controls.Add(webBrowser);
27 webBrowser.Load(url);
28 }
29 }
30 }
复制代码
3、解决问题
1)、增加 AnyCPU 支持(CefSharp.Common does not work correctly on 'AnyCPU' platform. You need to specify platform (x86 / x64)。 这个错误其实是cefsharp的一个缺陷。cefsharpPic的项目团队说以后会把这个bug修补。我们暂时现在把这个问题解决。 )
[1]、您必须将<CefSharpAnyCpuSupport> true </ CefSharpAnyCpuSupport>添加到项目中的第一个<PropertyGroup>配置节(例如.csproj文件)
复制代码
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\CefSharp.WinForms.69.0.0\build\CefSharp.WinForms.props" Condition="Exists('..\packages\CefSharp.WinForms.69.0.0\build\CefSharp.WinForms.props')" />
<Import Project="..\packages\CefSharp.Common.69.0.0\build\CefSharp.Common.props" Condition="Exists('..\packages\CefSharp.Common.69.0.0\build\CefSharp.Common.props')" />
<Import Project="..\packages\cef.redist.www.gcyL157.com x86.3.3497.1841\build\cef.redist.x86.props" Condition="Exists('..\packages\cef.redist.x86.3.3497.1841\build\cef.redist.x86.props')" />
<Import Project="..\packages\cef.redist.x64.3.3497.1841\build\cef.redist.x64.props" Condition="Exists('..\packages\cef.redist.x64.3.3497.1841\build\cef.redist.x64.props')www.fengshen157.com/" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>
复制代码
[2]、增加 <probing privatePath="x86"/> 去你的 app.config 配置文件。
<runtime>
<assemblyBinding xmlns=" www.boyunylpt1.com urn:schemas-microsoft-com:asm.v1">
<probing privatePath="x86"/>
</assemblyBinding>
</runtime>
[3]、修改应用程序根目录下的 Program.cs 文件。
复制代码
1 [STAThread]
2 public static void Main()
3 {
4 var settings = new CefSettings();
5 settings.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";
6
7 Cef.Initialize(settings, www.gxgjpt1.com performDependencyCheck: false, browserProcessHandler: null);
8
9 var browser = new BrowserForm();
10 Application.Run(browser);
11 }
复制代码
2)、没有在程序启动的时候初始化 CefSharp 导致添加ChromiumWebBrowser控件显示一片灰色。
[1]、要初始化 CefSharp 对象,否则就是什么都没有。
复制代码
1 [STAThread]
2 public static void Main()
3 {
4 var settings = new CefSettings();
5 settings.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";
6
7 Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);
8
9 var browser = new yongshiyule178.com BrowserForm();
10 Application.Run(browser);
11 }
复制代码
3)、bin目录下没有包含CefSharp.BrowserSubprocess.Core.dll、CefSharp.BrowserSubprocess.exe。关于这两个资源文件的作用,有兴趣可以了解浏览器的多进程架构机制原理。打开多个ChromiumWebBrowser控件显示网页就加载多个CefSharp.BrowserSubprocess.exe进程。
三、总结
这算是一个一个小的进步吧,以前没有遇过的东西,现在懂了就是进步。如有需要在深入了解。不忘初心,继续努力。
天下国家,可均也;爵禄,可辞也;白刃,可蹈也;中庸不可能也
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。