简单使用cefsharp在winform中嵌套浏览器
在上一节,我们学习了如何简单地在winform中嵌入chromium浏览器,我在使用这个开发项目时,需要点击一个按钮,弹出嵌入浏览器的窗体,出现一个问题,就是第一次点击按钮可以正常打开浏览器,第二次点击就会出现卡壳,闪退问题。由于对于chromium这个庞大的程序不太了解,上网搜索相关文章解决了该问题:
就是在嵌入浏览器的窗体类中不能用Cef.shutdown();需要在调用的主窗体中才能调用Cef.shutdown();,贴一下代码吧:
主窗体代码:点击按钮会弹出嵌有浏览器的窗体
using CefSharp;
using System;
using System.Windows.Forms;
namespace SecondApp
public partial class FrmMain : Form
public FrmMain()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
FrmSecond frmSecond = new FrmSecond();
frmSecond.Show();
//在这最后是否Cef
private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
Cef.Shutdown();
Environment.Exit(0);
//嵌入浏览器的窗体:
using CefSharp;
using CefSharp.WinForms;
using System;
using System.Windows.Forms;
namespace SecondApp
public partial class FrmSecond : Form
public ChromiumWebBrowser chromeBrowser;
public FrmSecond()
InitializeComponent();
private void FrmSecond_Load(object sender, EventArgs e)
// 创建浏览器控件
chromeBrowser = new ChromiumWebBrowser("https://blog.csdn.net/xingkongtianyuzhao");
// 将控件添加到窗体
this.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
//初始化浏览器并启动
public void InitializeChromium()
CefSettings settings = new CefSettings();
// 设置是否使用GPU
settings.CefCommandLineArgs.Add("disable-gpu", "1");
// 设置是否使用代理服务
settings.CefCommandLineArgs.Add("no-proxy-server", "1");
// 设置是否启动js交互,假如需要原生与js方法互调,则需要设置为true
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
// 初始化cef
Cef.Initialize(settings, true, browserProcessHandler: null);
catch (Exception ex)
MessageBox.Show(ex.Message);
//窗口关闭
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
chromeBrowser.CloseDevTools();//关闭浏览器调试工具
//此方法会同时关闭窗口,我们真只可以直接调用该方法,同时关闭浏览器及窗口
chromeBrowser.GetBrowser().CloseBrowser(true);//关闭浏览器
//释放浏览器对象
if (chromeBrowser != null && !chromeBrowser.Disposing)
chromeBrowser.Dispose();
具体源码参考:
https://gitee.com/Alexander360/LearnCefsharp
使用cefsharp在winform中嵌套浏览器简单使用cefsharp在winform中嵌套浏览器在上一节,我们学习了如何简单地在winform中嵌入chromium浏览器,我在使用这个开发项目时,需要点击一个按钮,弹出嵌入浏览器的窗体,出现一个问题,就是第一次点击按钮可以正常打开浏览器,第二次点击就会出现卡壳,山体问题。由于对于chromium这个庞大的程序不太了解,上网搜索相关文章解...
遇到如题问题,找了好多方法,都不能解决,非常感谢@星空你好的笔记https://blog.csdn.net/xingkongtianyuzhao/article/details/104048981
参考该笔记,基本解决了所有问题,会弹出对话框,显示“CEF can only be initialized once per process”,稍作修改后解决。
public partial class Form2 : Form
public ChromiumWebBrowse.
有的时候,我们需要在程序中嵌入Web浏览器,其实.Net Framework中本身就提供了WebBrowser控件,本身这个是最简单易用的方案,但不知道是什么原因,这个控件在浏览网页的时候有些莫名的卡顿,有的时候甚至能达到好几秒,严重影响体验。
这个时候,我们可以考虑使用第三方浏览器来代替系统的WebBrowser,常见的方案是使用版本帝Chrome,Chrome本身提供了供第三方程序嵌入的方案...
最近要写一个浏览器包裹一个网站,试了各种浏览器插件,记录一下。
CefSharp直接可以NuGet,搜索CefSharp就可以,按照你要的FrameWorks版本选择它的版本,注意项目不可以是Any CPU,必须指定x86或者x64。
测试这个效果还可以,就最终用了它,设计界面如下:
//应用程序域下未处理的错误
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
//Other
然后再下...
一、专栏介绍与目录
本专栏将带领大家一步一步完成一个功能完善的CefSharp 集成谷歌浏览器,学习完本专栏之后你将能完成一个这样的浏览器:
0、较为精致的浏览器界面;
1、单页面打开新网页,地址栏功能;
2、根据拖动控件放大缩小页面;
3、实现下载功能;
4、实现右键菜单功能;
5、实现浏览历史页添加;
6、实现收藏夹功能;
7、cefsharp本身不支持mp3、mp4,添加音乐、视频支持;
8、全局热键调出浏览器
9、添加简单的爬虫.
写了一个winform程序,功能是选择一个excel表格,把里面的内容写进sqlite数据库中,在本地测试没问题,但是在其他电脑上就会报错“未在本地计算机上注册microsoft.ace.12.0,在网上找了很多解决办法下载各种软件都没有效果,最后直接找对应的驱动文件,可算是解决了这个问题。
读取excel表格时电脑弹出错误窗口,提示“未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序”问题,是因为系统中没有安装相应的Microsoft Access 2007 数据库引擎可再发行程
CefSharp是基于Chromium的.NET项目,可用于在应用程序中嵌入Web浏览器。要调用Winform的方法,可以使用CefSharp中的JSObject和C#绑定功能。
首先,在Winform应用程序中创建一个方法,该方法将在CefSharp控件中调用。例如:
public void WinformMethod(string message)
MessageBox.Show(message);
接下来,在CefSharp控件中,注册一个JS对象,该对象将包含一个可以调用Winform方法的函数。例如:
var myJSObject = new MyJSObject();
chromeBrowser.RegisterJsObject("myObject", myJSObject);
public class MyJSObject
public void InvokeWinformMethod(string message)
Form1 form = (Form1)Form1.ActiveForm;
form.Invoke(new MethodInvoker(delegate { form.WinformMethod(message); }));
在这里,我们创建了一个名为“myObject”的JS对象,并将其绑定到MyJSObject类中的实例上。然后,我们在MyJSObject中定义了一个名为“InvokeWinformMethod”的方法,该方法将调用Winform中的“WinformMethod”方法。
注意,在CefSharp控件中调用Winform方法时,应使用Invoke方法在Winform线程上运行该方法,以避免线程冲突。
现在,您可以在CefSharp控件中调用“myObject.InvokeWinformMethod(message)”方法,该方法将调用Winform应用程序中的“WinformMethod”方法。
Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' while attempting
13129