在实现了.Net程序中嵌入Chrome浏览器后,下一步的个性化操作就是加入一些设置了,在前面的文章中,我们可以看到在使用Chrome控件前,有如下一个操作: var setting = new CefSharp.CefSettings();    CefSharp.Cef.Initialize(setting, true, false); 这个setting变量就是用来存放chrome的全局设置的地方,当需要进行设置的时候,只需要对它进行修改即可.例如,我们要修改缓存目录,只需要如下设置即可:…
有的时候,我们需要在程序中嵌入Web浏览器,其实.Net Framework中本身就提供了WebBrowser控件,本身这个是最简单易用的方案,但不知道是什么原因,这个控件在浏览网页的时候有些莫名的卡顿,有的时候甚至能达到好几秒,严重影响体验. 这个时候,我们可以考虑使用第三方浏览器来代替系统的WebBrowser,常见的方案是使用版本帝Chrome,Chrome本身提供了供第三方程序嵌入的方案Chromium Embedded Framework (CEF),但这个是C++的接口,在.Net程…
在使用CEF的过程中,我发现了一个现象:WPF版的CEF比Chrome性能要差:一些有动画的地方会掉帧(例如,CSS动画,全屏图片拖动等),视频播放的效果也没有Chrome流畅. 查了一下相关资料,发现CEFSharp.WPF不是直接渲染在控件上的,它的大概流程如下: CEFSharp.WPF的ChromiumWebBrowser控件本质上是一个图片 而是通过离屏渲染的方式渲染在缓冲区里, 绘制完成后,然后将缓冲区的数据传递到InteropBitmap中去 将InteropBitmap作为Chr…
CefSharp本身携带了一大堆文件,这些文件默认直接释放在exe文件底下,这种方式本身没有什么问题,但多了一大堆文件后不是很好看.本文这里就介绍一个方法,使得可以将CEF相关的文件部署到独立的文件夹. 在开始改造之前,还是得另外新建一个工程安装一次CEFSharp,这样才能获取到相关资源文件.然后从这些资源文件中分离出来. 首先把CEF进程相关的文件拷贝到一个独立的文件夹: 然后我们的程序中只需要引用CEFSharp相关的.net代码的dll,主要有如下几个: 修改主代码的配置,主要包括如下几…
chrome强大的调试功能令许多开发者爱不释手,在使用cef的时候,我们也可以继承这强大的开发者工具. 集成调试: 我们可以使用如下函数直接使用集成在chrome里的开发者工具 _chrome.ShowDevTools(); 这种方式下,类似chrome中按F12,直接打开了一个开发者工具窗口, 远程调试: 也可以使用chrome远程调试的方式来调试我们的cef程序,只需要设置远程调试端口即可. var setting = new CefSettings {RemoteDebuggingPort…
在实际使用过程中,发现有的客户端会出现chrome加载网页过慢问题,定位后发现很多是因为设置系统代理所致,此时可以通过如下启动参数禁止系统代理. {"proxy-auto-detect", "0"},{"no-proxy-server", "1"}, 另外一个小技巧是: 由于cef本身是一个独立的进程,我们不需要等待主窗口加载完成后再创建ChromiumWebBrowser,单独启动它也不影响主程序启动速度, 因此可以将Chr…
一个常用的功能就是禁止浏览器本身的右键菜单,靠在WPF中拦截鼠标事件是不行的,可以通过设置MenuHandler来实现. 首先实现一个IContextMenuHandler. public class NullMenuHandler : IContextMenuHandler { public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams par…
CefSharp本身提供了WPF和WinForm两个版本的控件,这两个版本的控件使用方法大同小异,由于我WPF的版本用的较多,这里就简单的介绍下WPF版的CEFSharp控件的用法. 加载页面: ChromiumWebBrowser提供了Load函数,可以实现页面的加载, _chrome.Load("http://tianfang.cnblogs.com/"); 不过这个函数只能在CEF控件加载完成后进行,用起来有些不方便,往往用他来实现页面的刷新.实际使用中大多通过设置Address…
CEF中的Cookie是通过CookieManager来管理的,可以用它来设置发送的Cookie. 发送Cookie 发送Cookie的一个基本示例如下: var cookieManager = _chrome.GetCookieManager();cookieManager.SetCookie("http://localhost:5000/test", new Cookie(){    Name  = "name",    Value = "123&qu…
要在CEF中和网页的JS进行交互,首先我们要通过设置启用Javascrit集成功能. CefSharpSettings.LegacyJavascriptBindingEnabled = true; 调用JavaScript: 简单的调用JavaScript可以直接使用ExecuteScriptAsync扩展函数. _chrome.ExecuteScriptAsync("alert('hello world')"); 实际上,JavaScript是具体到frame的,上述代码等价于 _c…