[Winfrom]Cefsharp配置与初始化
摘要
在做客户端程序的时候,本来打算使用wpf的,但在内嵌cefsharp的时候,发现输入法有问题,所以使用了winform作为cefsharp的容器。
系列文章
[Winfrom]Cefsharp配置与初始化
初始化与配置
/// <summary> /// 浏览器配置 /// </summary> private CefSharp.CefSettings _settings; /// <summary> /// 浏览器对象 /// </summary> CefSharp.WinForms.ChromiumWebBrowser _webView;
/// <summary> /// 加载页面 /// </summary> /// <param name="url"></param> private void LoadPage(string pageName) { string url = string.Format(StaticParameter.htmlPathFormat, StaticParameter.ExeDir, pageName); try { if (_webView == null) { _settings = new CefSharp.CefSettings(); _settings.UserAgent = StaticParameter.UserAgent; // Enable WebRTC _settings.CefCommandLineArgs.Add("enable-media-stream", "1"); //Disable GPU Acceleration _settings.CefCommandLineArgs.Add("disable-gpu", "1"); // Don't use a proxy server, always make direct connections. Overrides any other proxy server flags that are passed. // Slightly improves Cef initialize time as it won't attempt to resolve a proxy _settings.CefCommandLineArgs.Add("no-proxy-server", "1"); _settings.Locale = "zh-CN"; //缓存路径 _settings.CachePath = StaticParameter.ExeDir + "/BrowserCache"; //浏览器引擎的语言 _settings.AcceptLanguageList = "zh-CN,zh;q=0.8"; _settings.LocalesDirPath = StaticParameter.ExeDir + "/localeDir"; //日志文件 _settings.LogFile = StaticParameter.ExeDir + "/LogData"; _settings.PersistSessionCookies = true; _settings.UserDataPath = StaticParameter.ExeDir + "/userData"; CefSharp.Cef.Initialize(_settings); _webView = new CefSharp.WinForms.ChromiumWebBrowser(url) { BrowserSettings = { DefaultEncoding = "UTF-8" }, MenuHandler = new MenuHandler(), LifeSpanHandler = new OpenPageSelf(), Dock = DockStyle.Fill }; ScriptCallbackManager scriptManager = new ScriptCallbackManager(); scriptManager.MiniWinidowHandler += scriptManager_MiniWinidowHandler; _webView.LoadError += _webView_LoadError; _webView.RegisterJsObject("googleBrower", scriptManager,
new CefSharp.BindingOptions { CamelCaseJavascriptNames = false }); this.Controls.Add(_webView); } else { _webView.Load(url); } } catch (Exception ex) { LogInfoData.WriteLog(new LogInfo { IsSend = false, Message = ex.Message, Op = "loadpage_err" }); } }
禁用右键菜单
/// <summary> /// 禁用右键菜单 /// </summary> internal class MenuHandler : IContextMenuHandler { public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser,
IFrame frame, IContextMenuParams parameters, IMenuModel model) { model.Clear(); } public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame,
IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags) { return false; } public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame) { } public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser,
IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback) { return false; } }
加载页面失败
void _webView_LoadError(object sender, CefSharp.LoadErrorEventArgs e) { MessageBox.Show("加载页面失败,请退出客户端进行重试"); Quit(); }
关闭cefsharp
CefSharp.Cef.Shutdown(); if (_webView != null) { _webView.Dispose(); }
刷新页面
//刷新 _webView.GetBrowser().Reload();
总结
安装cefsharp可以使用nuget进行安装。
-
博客地址:http://www.cnblogs.com/wolf-sun/
博客版权:如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2013-07-14 新手 开灯关灯效果