摘要
在做客戶端程序的時候,本來打算使用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進行安裝。