我正在尝试支持使用cefsharp(v79.1.360)的应用程序。
有一些我需要实现的事情清单:
1)WPF中的ChromiumWebBrowser(使用CefSharp.Wpf最小示例)
2)此浏览器可以退出屏幕(带有折叠窗口或关闭窗口)
3)使用JavaScriptObjectRepository,并启动将与网页一起工作的一些代码(单击按钮,更改元素的文本)。页面可能使用框架,websocket,Http请求和其他内容网页通常可以。
完成页面工作后,我通过调用对象的方法将结果发送到C#,并绑定到jsObjectRepository /
期望:
离屏性能(时间延迟)应与打开窗口的时间一样/
现实:
屏幕外性能有时确实很差,最多需要10秒钟才能完成工作(wpf只有1-5时。)>
我的代码:
初始化
CefSharpSettings.LegacyJavascriptBindingEnabled = true; CefSharpSettings.WcfEnabled = true; CefSettings cefSettings = new CefSettings { LocalesDirPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "locales"), Locale = appsettings.CurrentChromeLanguage.ToLocal(), AcceptLanguageList = appsettings.CurrentChromeLanguage.ToAcceptList(), }; if (!cefSettings.CefCommandLineArgs.ContainsKey("disable-gpu")) { cefSettings.CefCommandLineArgs.Add("disable-gpu", "1"); } if (cefSettings.CefCommandLineArgs.ContainsKey("enable-system-flash")) { cefSettings.CefCommandLineArgs.Remove("enable-system-flash"); } if (cefSettings.CefCommandLineArgs.ContainsKey("enable-media-stream")) { cefSettings.CefCommandLineArgs.Remove("enable-media-stream"); } cefSettings.CefCommandLineArgs.Add("enable-begin-frame-scheduling", "1"); cefSettings.CefCommandLineArgs.Add("disable-gpu-vsync", "1"); cefSettings.CefCommandLineArgs.Add("mute-audio", "true"); cefSettings.CefCommandLineArgs.Add("enable-media-stream", "0"); cefSettings.CefCommandLineArgs.Add("disable-3d-apis", "1"); cefSettings.CefCommandLineArgs.Add("renderer-process-limit", "10"); cefSettings.CefCommandLineArgs.Add("js-flags", "--lite_mode"); if (!appsettings.IsLoadImage) { cefSettings.CefCommandLineArgs.Add("disable-image-loading", "1"); } cefSettings.LogFile = Path.Combine(ClientConfig.ChromeDataPath, "Log.txt"); cefSettings.LogSeverity = LogSeverity.Error; cefSettings.IgnoreCertificateErrors = true; cefSettings.SetOffScreenRenderingBestPerformanceArgs();
浏览器的创建和使用:
ChromiumWebBrowser browser = new ChromiumWebBrowser(); //xaml window with <ContentControl> with browser //need hide means when window is closing, we cancel it, and using Hide() NewBrowserView view = new NewBrowserView(new ChromeTabViewModel(browser)); view.Closing += BrowserView_Closing; Browser.FrameLoadStart += _browser_FrameLoadStart; var options = new BindingOptions { CamelCaseJavascriptNames = false }; browser.JavascriptObjectRepository.Register("resultController", this, false, options); //we can just hide window void BrowserView_Closing(object sender, CancelEventArgs e) { if (_needHide) { e.Cancel = true; Hide(); } } //on page load void _browser_FrameLoadStart(object sender, FrameLoadStartEventArgs e) { string code = ""; code += "(async function(){ " + "await CefSharp.BindObjectAsync('resultController'); " + code += TestJsCode; code += " })();";//AddWorker e.Frame.ExecuteJavaScriptAsync(code, $"about:blank/myCode"); Consol.WriteLine(DateTime.Now); } public void OnGoodResult() { Consol.WriteLine(DateTime.Now); } public void OnBadResult() { Consol.WriteLine(DateTime.Now); } //then i just go by differnet pages and await results
正如我之前提到的,当我隐藏wnd时,打印结果花费的时间太长
我正在尝试支持使用cefsharp(v79.1.360)的应用程序。我需要实现的清单如下:1)WPF中的ChromiumWebBrowser(使用CefSharp.Wpf最小示例)2)此浏览器可以运行...
我确实依赖于Layouts和其他视觉效果,所以我明白了。当窗口崩溃时,我应该设置此代码: