我在WPF应用程序中嵌入了CefSharp浏览器,试图在其中加载WebPage。我也绑定了JavaScript对象使用 RegisterJsObject函数。这是必需的,因为网页JS会调用Native应用。
如果页面加载需要时间/任何错误,我已经实现了WatchDogTimer来切换到错误页面。 问题是,当尝试在超时的情况下加载错误页面时,它将杀死现有的CefSharp.BrowserSubprocess.exe并创建一个新文件。但这失去了JavaScript绑定,因此无法从JS调用Native App。
有什么方法可以避免创建CefSharp.BrowserSubprocess.exe的新进程?
答案 0 :(得分:1)
您可以使用CefSettings类更改此行为。默认情况下,Chromium为用户访问的网站的每个实例创建一个渲染器进程,但是您可以对其进行更改
var settings = new CefSettings();
settings.CefCommandLineArgs.Add("renderer-process-limit", "0");
Cef.Initialize(settings);
请注意,您必须先创建ChromiumWebBrowser的第一个实例。
重要提示:如amaitland在其下方的评论中所述,您应该非常小心地使用它,并且
仅当您使用单个浏览器实例时,您才可以 考虑这样做。单个进程中托管的多个实例可以 轻松耗尽内存,一次崩溃,它们都停止工作。 另外,如果渲染过程由于任何原因而崩溃,则新 实例不会绑定对象。
如果您使用的是旧版绑定,那么这是预期的,请参见http://cefsharp.github.io/api/71.0.0/html/P_CefSharp_CefSharpSettings_LegacyJavascriptBindingEnabled.htm
使用更新的绑定方法是最好的选择https://github.com/cefsharp/CefSharp/wiki/General-Usage#3-how-do-you-expose-a-net-class-to-javascript