加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#使用CefSharp开源库开发Chrome 浏览器

发布时间:2020-12-16 01:18:21 所属栏目:百科 来源:网络整理
导读:??? ?? ? 一、介绍 ?? ??? ?这个东西我以前没有接触过,但是公司项目里面有用到这个东西,所以就顺便研究一下。今天只是做了 WinForm 的测试,有时间了在试试 WPF 是如何实现的。刚开始一塌糊涂,有点麻烦,慢慢的理清了,其实也不是很难。 ?? ? 二、开发步

???
?? ?一、介绍

?? ??? ?这个东西我以前没有接触过,但是公司项目里面有用到这个东西,所以就顺便研究一下。今天只是做了 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="..packagesCefSharp.WinForms.69.0.0buildCefSharp.WinForms.props" Condition="Exists('..packagesCefSharp.WinForms.69.0.0buildCefSharp.WinForms.props')" />
                      ="..packagesCefSharp.Common.69.0.0buildCefSharp.Common.props"="Exists('..packagesCefSharp.Common.69.0.0buildCefSharp.Common.props')" ="..packagescef.redist.x86.3.3497.1841buildcef.redist.x86.props"="Exists('..packagescef.redist.x86.3.3497.1841buildcef.redist.x86.props')" ="..packagescef.redist.x64.3.3497.1841buildcef.redist.x64.props"="Exists('..packagescef.redist.x64.3.3497.1841buildcef.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 = @"x86CefSharp.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进程。


?? ?三、总结

?? ??? ?这算是一个一个小的进步吧,以前没有遇过的东西,现在懂了就是进步。如有需要在深入了解。不忘初心,继续努力。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读