相关文章推荐
宽容的刺猬  ·  Timeout expired ...·  1 年前    · 

简单使用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