C#使用CefSharp开源库开发Chrome 浏览器
一、介绍
这个东西我以前没有接触过,但是公司项目里面有用到这个东西,所以就顺便研究一下。今天只是做了 WinForm 的测试,有时间了在试试 WPF 是如何实现的。刚开始一塌糊涂,有点麻烦,慢慢的理清了,其实也不是很难。
二、开发步骤
1、下载和安装程序集
当前程序集最新的版本是69.0.0,如果想直接下载程序集的 DLL ,可以通过该地址进行下载 https://www.nuget.org/packages/CefSharp.WinForms/69.0.0。说明一下,以后的版本有可能会变,具体的地址也有可能会变。可以通过nuget轻松获得所有的依赖库。如果的你的网络不好,可以先下载,然后再在项目中添加引用。 效果如图:
如果是使用 Windows 操作系统,开发 WinForm 应用,我们可以使用 NuGet 程序包进行安装:
PM> Install-Package CefSharp.WinForms -Version 69.0. NET CLI: >dotnet add package CefSharp.WinForms --version 69.0. Paket CLI: >paket add CefSharp.WinForms --version 69.0.
2、代码实现
1)主窗体实现:
主窗体如图:
主窗体代码:
using CefSharp.WinForms;
using System.Windows.Forms; namespace ChromiumWebBrowserForWindowsForms
{
public partial class frmBrower : Form
{
private ChromiumWebBrowser webBrowser; public frmBrower()
{
InitializeComponent();
this.Load += Form1_Load;
} private void Form1_Load(object sender, System.EventArgs e)
{
webBrowser = new ChromiumWebBrowser("www.cnblog.com");
webBrowser.Dock = DockStyle.Fill;
this.pnlContainer.Controls.Add(webBrowser);
webBrowser.Load("www.cnblogs.com");
} private void btnEnter_Click(object sender, System.EventArgs e)
{
ChildForm child = new ChildForm(txtUrl.Text);
child.Show();
}
}
}
2)子窗体实现:
子窗体如图:
代码实现:
using CefSharp.WinForms;
using System;
using System.Windows.Forms; namespace ChromiumWebBrowserForWindowsForms
{
public partial class ChildForm : Form
{
private ChromiumWebBrowser webBrowser;
private string url;
public ChildForm()
{
InitializeComponent();
this.Load += ChildForm_Load;
} public ChildForm(string text):this()
{
url = text;
} private void ChildForm_Load(object sender, EventArgs e)
{
webBrowser = new ChromiumWebBrowser(null);
webBrowser.Dock = DockStyle.Fill;
this.Controls.Add(webBrowser);
webBrowser.Load(url);
}
}
}
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.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')" />
<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="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="x86"/>
</assemblyBinding>
</runtime>
[3]、修改应用程序根目录下的 Program.cs 文件。
[STAThread]
public static void Main()
{
var settings = new CefSettings();
settings.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe"; Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null); var browser = new BrowserForm();
Application.Run(browser);
}
2)、没有在程序启动的时候初始化 CefSharp 导致添加ChromiumWebBrowser控件显示一片灰色。
[1]、要初始化 CefSharp 对象,否则就是什么都没有。
[STAThread]
public static void Main()
{
var settings = new CefSettings();
settings.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe"; Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null); var browser = new BrowserForm();
Application.Run(browser);
}
3)、bin目录下没有包含CefSharp.BrowserSubprocess.Core.dll、CefSharp.BrowserSubprocess.exe。关于这两个资源文件的作用,有兴趣可以了解浏览器的多进程架构机制原理。打开多个ChromiumWebBrowser控件显示网页就加载多个CefSharp.BrowserSubprocess.exe进程。
三、总结
这算是一个一个小的进步吧,以前没有遇过的东西,现在懂了就是进步。如有需要在深入了解。不忘初心,继续努力。
C#使用CefSharp开源库开发Chrome 浏览器的更多相关文章
- .net使用cefsharp开源库开发chrome浏览器(二)
离上篇写介绍pc端的混合开发和为什么以cefsharp入手研究混合开发已经有好几天,一直忙,抽不出时间继续写怎么搭建cefsharp开发环境.其实没有时间是借口,一切都是懒,没有爱到深处. 今天继续写 ...
- .net使用cefsharp开源库开发chrome浏览器(一)
一.背景 公司现在使用.NET技术,有web组.有winfrom桌面组.而这两组团队业务部分有分多相似的地方,使用的数据源也是相同的,以此造成两组团队之间做了很多彼此都已经做过的工作. 有什么办法使得 ...
- .net使用cefsharp开源库开发chrome
.net使用cefsharp开源库开发chrome 离上篇写介绍pc端的混合开发和为什么以cefsharp入手研究混合开发已经有好几天,一直忙,抽不出时间继续写怎么搭建cefsharp开发环境.其实没 ...
- CefSharp开源库的使用(一)
关于CEF: 嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrows ...
- 怎样开发Chrome浏览器的插件
http://jingyan.baidu.com/article/b907e627fb90fd46e7891c3c.html Chrome 浏览器作为基于Webkit的新一代浏览器.Chrome自从正 ...
- iOS----精品开源库-开发强力助攻
30个精品iOS开源库,超强助攻 你不会想错过他们,真的. 我爱开源. 文章的尾部你会看到一个太长不看的版本——一个简单的列表,只有标题和到项目的链接.如果你发现这篇文章是有用的,把它和你的iOS开 ...
- Chrome浏览器扩展开发系列之十六:扩展中可用的Chrome浏览器API
除了Chrome浏览器支持的chrome.* API之外,Chrome浏览器扩展还可以使用Chrome浏览器为Web页面或Chrome app提供的APIs.对于Chrome浏览器2支持的API,还可 ...
- 基于.net开发chrome核心浏览器【七】
这是一个系列的文章,前面六篇文章的地址如下: 基于.net开发chrome核心浏览器[六] 基于.net开发chrome核心浏览器[五] 基于.net开发chrome核心浏览器[四] 基于.net开发 ...
- 基于.net开发chrome核心浏览器
本文转载自:http://www.cnblogs.com/liulun/archive/2013/04/20/3031502.html 一: 上一篇的链接: 基于.net开发chrome核心浏览器[一 ...
随机推荐
- windows 服务的安装与卸载之bat脚本命令
在windows 平台下,服务的安装与卸载可通过bat 脚本命令来完成,同时可编辑服务的描述,具体代码如下: 1.服务的安装DynamicPlanService_installer.bat: @ech ...
- 数组Array的API1
数组的方法arr.includes()arr.every(fn(val,i))arr.some(fn(val,i))arr.filter(fn(val,i))arr.map(fn(val,i))ar. ...
- java实现字符串和LIST,MAP转换
需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...
- Linux系统上面使用python切割nginx日志
#!/usr/bin/python import time import os import commands path = ['/var/log/nginx/', 'access.log'] (nu ...
- IntelliJ IDEA SVN突然没有了
1.在IDEA中找不到 SVN 的选项了,版本控制工具中没有subversion,在setting中也无法查询到对应的svn工具,这是因为我们在idea的svn插件中把svn这个选项禁用了 解决办法: ...
- LocalVariableTable之 Slot 复用
LocalVariableTable中的 Slot, 是存在复用现象的,这个我早就知道,但是,不太清楚是如何复用的. Java语言规范与JVM规范都没有对Java语言具体要如何使用JVM的局部变量sl ...
- Linux 系统状态检测命令
介绍快速查看Linux系统运行状态的能力(网络网卡.系统内核.系统负载.内存使用情况.启用终端数量.历史登录记录.命令执行记录.救援诊断)等命令使用方法 1.ifconfig 用于获取网卡配置和网络 ...
- 01 HTML快速入门
HTML CSS JS (网络三剑客) 上网就是下载网页 浏览器 就是一个解释器 CS模式--------client serverbs模式--------browser server HTML是什么 ...
- 关于在Python3.6下安装MySQL-python,flask-sqlalchemy模块的问题
这周末在学习Flask框架的时候,有需要安装MySQL-python模块,一开始用pip安装: pip install MySQL-python 但是安装的时候报错了: error: command ...
- Monkey测试简介
1.Monkey测试简介monkey是安卓命令行工具,它向系统发送伪随机的用户事件,例如:按键的输入.触摸屏的输入.手势输入等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常.因此,mo ...