试图加载新的URL时Browser.Load正在孕育一个新的Process

问题描述 投票:-1回答:1

我已经嵌入CefSharp浏览器WPF应用程序在那里我试图加载网页。此外,我已经使用RegisterJsObject功能结合JavaScript对象。的网页制作到本机应用程序的调用,这是必需的JS。

我实现了一个看门狗计时器切换,如果网页加载需要时间/任何错误的错误页面。问题是,当它试图在超时的情况下加载错误的网页,它是杀害现有CefSharp.BrowserSubprocess.exe并创建一个新的。但是,这是失去的JavaScript绑定,从而没有电话可以从JS作出本机应用程序。

有没有什么办法,以避免产生CefSharp.BrowserSubprocess.exe的新工艺?

cefsharp chromium-embedded
1个回答
1
投票

您可以使用CefSettings类来改变这种行为。默认情况下,铬创建一个网站的用户访问的每一个实例的呈现过程,但你可以改变它

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

© www.soinside.com 2019 - 2024. All rights reserved.