一、介绍
这个东西我以前没有接触过,但是公司项目里面有用到这个东西,所以就顺便研究一下。今天只是做了 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 6 7 Paket CLI: 8 9 >paket add CefSharp.WinForms --version 0
2、代码实现
1)主窗体实现:
主窗体如图:
主窗体代码:
1 using CefSharp.WinForms; 2 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.com22 23 24 void btnEnter_Click(25 26 ChildForm child = new ChildForm(txtUrl.Text); 27 child.Show(); 28 29 } 30 }
2)子窗体实现:
子窗体如图:
代码实现:
System; 3 4 5 6 7 ChildForm : Form 8 9 string url; 11 ChildForm() 13 14 ChildForm_Load; 15 16 17 public ChildForm(string text):() 18 19 url = text; 20 21 22 void ChildForm_Load(23 24 webbrowser = new ChromiumWebbrowser(null25 webbrowser.Dock =26 .Controls.Add(webbrowser); webbrowser.Load(url); 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')" /> ="..\packages\CefSharp.Common.69.0.0\build\CefSharp.Common.props"="Exists('..\packages\CefSharp.Common.69.0.0\build\CefSharp.Common.props')" ="..\packages\cef.redist.x86.3.3497.1841\build\cef.redist.x86.props"="Exists('..\packages\cef.redist.x86.3.3497.1841\build\cef.redist.x86.props')" ="..\packages\cef.redist.x64.3.3497.1841\build\cef.redist.x64.props"="Exists('..\packages\cef.redist.x64.3.3497.1841\build\cef.redist.x64.props')" ="$(MSBuildExtensionsPath)\$(MSBuildToolsversion)\Microsoft.Common.props"="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsversion)\Microsoft.Common.props')" PropertyGroup> CefSharpAnycpuSupport>true</>
[2]、增加 <probing privatePath="x86"/> 去你的 app.config 配置文件。
runtimeassemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="x86"/> assemblyBinding> >
[3]、修改应用程序根目录下的 Program.cs 文件。
1 [STAThread] 2 static void Main() 3 4 var settings = CefSettings(); 5 settings.browserSubprocesspath = @"x86\CefSharp.browserSubprocess.exe; 6 7 Cef.Initialize(settings,performDependencyCheck: false,browserProcessHandler: 8 var browser = browserForm(); 10 Application.Run(browser); 11 }
2)、没有在程序启动的时候初始化 CefSharp 导致添加ChromiumWebbrowser控件显示一片灰色。
[1]、要初始化 CefSharp 对象,否则就是什么都没有。
11 }
3)、bin目录下没有包含CefSharp.browserSubprocess.Core.dll、CefSharp.browserSubprocess.exe。关于这两个资源文件的作用,有兴趣可以了解浏览器的多进程架构机制原理。打开多个ChromiumWebbrowser控件显示网页就加载多个CefSharp.browserSubprocess.exe进程。
三、总结
这算是一个一个小的进步吧,以前没有遇过的东西,现在懂了就是进步。如有需要在深入了解。不忘初心,继续努力。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。