添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

安装cefsharp

CefSharp中文帮助文档

  • 使用NuGet搜索CefSharp然后下载CefSharp.WinForms
  • 将平台换为X86或者X64,Any Cpu无法编译成功

实例化浏览器

settings中有一些查用配置
settings.CefCommandLineArgs.Add("–disable-web-security",“1”);//关闭同源策略,允许跨域
settings.CefCommandLineArgs.Add(“ppapi-flash-version”, “18.0.0.209”);//PepperFlash\manifest.json中的version
settings.CefCommandLineArgs.Add(“ppapi-flash-path”, “PepperFlash\pepflashplayer.dll”);
settings.CefCommandLineArgs.Add("–enable-system-flash", “1”);//使用系统flash
settings.CefCommandLineArgs.Add(“disable-gpu”, “1”);//去掉gpu,否则chrome显示有问题
settings.CefCommandLineArgs.Add(“proxy-auto-detect”, “0”); //去掉代理,增加加载网页速度
settings.CefCommandLineArgs.Add(“no-proxy-serve”, “1”); //去掉代理,增加加载网页速度
以上设置未测试是否可行

 public partial class FrmMain : Form
        ChromiumWebBrowser bs;
        public FrmMain()
            InitializeComponent();
        private void FrmMain_Load(object sender, EventArgs e)
            //实例化浏览器
            var settings = new CefSettings
                Locale = "zh-CN"
            Cef.Initialize(settings);
            bs = new ChromiumWebBrowser("https://www.baidu.com/")
                // 填充整个父控件
                Dock = DockStyle.Fill,
                //响应按键
                KeyboardHandler = new CEFKeyBoardHander()
            // 添加到窗口的控件列表中bs
            panel1.Controls.Add(bs);
        private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)
        	// 结束时要销毁
            bs.Dispose();
            bs = null;
            Cef.Shutdown();

响应F12打开控制台console

在ChromiumWebBrowser中添加KeyboardHandler属性响应按键

//响应按键
KeyboardHandler = new CEFKeyBoardHander()
//...
public class CEFKeyBoardHander : IKeyboardHandler
        public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey)
            if (type == KeyType.KeyUp && Enum.IsDefined(typeof(Keys), windowsKeyCode))
                var key = (Keys)windowsKeyCode;
                switch (key)
                    case Keys.F12:
                        browser.ShowDevTools();
                        break;
                    case Keys.F5:
                        if (modifiers == CefEventFlags.ControlDown)
                            //MessageBox.Show("ctrl+f5");
                            browser.Reload(true); //强制忽略缓存
                            //MessageBox.Show("f5");
                            browser.Reload();
                        break;
            return false;
        public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
            return false;

c#调用js方法

仅需一行代码就可以

bs.ExecuteScriptAsync("$('#su').val('c#调用js');");

js调用c#方法

1、将c#对象注册为 js对象

设置CefSharpSettings.LegacyJavascriptBindingEnabled = true 这一行要放在第一次初始化Cef的下面
将c#对象注册为 js对象RegisterJsObject

  private void FrmMain_Load(object sender, EventArgs e)
            //实例化浏览器
            var settings = new CefSettings
                Locale = "zh-CN"
            Cef.Initialize(settings);
            CefSharpSettings.LegacyJavascriptBindingEnabled = true;
            bs = new ChromiumWebBrowser("https://www.baidu.com/")
                // 填充整个父控件
                Dock = DockStyle.Fill,
                //响应按键
                KeyboardHandler = new CEFKeyBoardHander()
            //将c#对象注册为 js对象
            bs.RegisterJsObject("jsObj", new JsEvent(), new BindingOptions() { CamelCaseJavascriptNames = false });
            // 添加到窗口的控件列表中bs
            panel1.Controls.Add(bs);
public class JsEvent
        public void ShowTest(string msg)
            MessageBox.Show("this in C#.\n\r" + msg);
2、js调用注册的c#对象
jsObj.ShowTest("hello");

判断html是否页面加载完成

让你的chrome控制台完全支持jQuery语法

* 注意:1.https页面引用的cdn也必须是https的 * 2.每个页面是独立的,添加的代码只对当前页有作用,刷新后也必须重新输入代码 * 国内CDN平台推荐:https://www.bootcdn.cn/jquery/ // http页面先在控制台写如下代码 ;(function(d,s){d.body.appendChild(s=d.createElement('script')).src='http://cdn.bootcss.com/jquery/1.11.0/jquery.min.js'})(document); // https页面先在控制台写如下代码 ;(function(d,s){d.body.appendChild(s=d.createElement('script')).src='https://cdn.bootcss.com/jquery/1.11.0/jquery.min.js'})(document); //某些网站仅支持指定域名,比如掘金指定百度等域名。就可以使用百度的cdn。 ;(function(d,s{d.body.appendChild(s=d.createElement('script')).src='https://libs.baidu.com/jquery/2.0.0/jquery.min.js'})(document);
同理,调用c#执行代码,就可以让没有jQuery的远程页面支持jQuery
//这行代码放在panel1.Controls.Add(bs);下面
bs.FrameLoadEnd += Bs_FrameLoadEnd;
private void Bs_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
            if (e.Frame.IsMain)	//判断网页是否加载完成
            //c#执行js代码
                e.Frame.ExecuteJavaScriptAsync(";(function(d,s){d.body.appendChild(s=d.createElement('script')).src='https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js'})(document);");
/// </summary>
/// <param name="url">打开网页的链接</param>
public static void OpenBrowserUrl(string url)
        System.Diagnostics.Process.Start("chrome.exe", url);
    catch
                                    通过本指南的学习,您已经掌握了 Chrome DevTools 控制台的各种功能和使用技巧。从基础的日志输出到高级的格式化输出,再到对象和数组的展开与展示,控制台为前端开发者提供了强大的调试工具。无论是实时测试代码片段还是调试定位问题,控制台都能显著提升工作效率和代码质量。利用过滤器面板和工具栏,您可以快速找到关键信息,轻松管理日志输出。高级功能如字符串替换和深层对象展示,使您能更直观地理解复杂数据。掌握这些技巧后,您不仅能更快地解决问题,还能优化前端应用,提升用户体验。
                                    C#.NET WinFrom开发之嵌入Google浏览器 (CefSharp) 
    学习C# winform开发时,当时就想做个简单的浏览器来封装自己写的PHP项目,但是VS C#自带的WebBrowser属于IE内核的,所以在功能上大家都心照不宣。随之我到网上去找相关的资料学习,很多同行的朋友都提到WebKit.NET的嵌入方式,但是我使用了以后没有想象中的好,在html5兼容上一般,在j...
                                    winform的Cefsharp 83.x版本对原来的IRequestHandler 接口做了调整,
以前的版本在IRequestHandler 里有GetResourceResponseFilter 接口,可以对response数据进行过滤、修改,但是最近更新了新版之后发现接口不见了,然后搜了好久没搜到,能搜到的都是很老的版本。后来在源码里去找了半天才发现接口位置给换地方了。
现在的接口位置位于IRequestHandler.GetResourceRequestHandler ->IR...
背景:项目采用 Ionic + Cordova 混合开发模式,已经成功运行在 iOS 和 Android设备上,由于主体代码都是 H5,所以尝试封装 Windows 客户端。
所以有几个特殊需要:① 访问本地网页;②访问跨域资源
本地环境:
操作系统:Windows 7 专业版 64 位
开发工具:MicroSoft Visual Studio 2013
运行环境:.NET FrameWor...
                                    在开发过程中经常需要在程序中嵌入浏览器控件用于访问网页,Visual Studio中自带了一个webbrowser控件,但无奈这个控件是调用用户电脑上的IE浏览器来实现的,如果用户装的是低版本IE(比如Win7的IE8)很多新的网页标准就无法得到支持,这时使用CefSharp来替代webbrowser控件是一个不错的选择。
这里用Visual Studio 2015演示CefSharp使用。
首先请确保程序的目标框架至少是.NET Framework 4.5.2,不是的话请双击“解决方案资源管理器”里的P