CEF Xilium.CefGlue在打开网页的时候,经常会死掉闪退,频率有可能会频繁到开几个网页就死掉了,在这种情况下使用CEF来开发自己的浏览器应用程序基本上不可能。笔者经过自己的一些使用经历和在交流群群友的分享,找到了解决方法
在CEF 初始化的CefRuntime.Initialize方法传入的CefSettings中,加入如下属性:
settings.WindowlessRenderingEnabled = true;
该属性主要是针对用那种JSUI的控件的网站,如果不启用,浏览器遇到该类网站基本上都会闪退,完整代码如下:
CefRuntime.Load();
var settings = new CefSettings();
.
.
.
.
.
.
//如果不开启好多用那种JSUI的控件的网站 什么的全死
settings.WindowlessRenderingEnabled = true;
var args = new string[] { };
var argv = args;
if (CefRuntime.Platform != CefRuntimePlatform.Windows)
{
argv = new string[args.Length + 1];
Array.Copy(args, 0, argv, 1, args.Length);
argv[0] = "-";
}
var mainArgs = new CefMainArgs(argv);
var exitCode = CefRuntime.ExecuteProcess(mainArgs, Global.app);
Console.WriteLine("CefRuntime.ExecuteProcess() returns {0}", exitCode);
if (exitCode != -1)
return exitCode;
foreach (var arg in args) { if (arg.StartsWith("--type=")) { return -2; } }
CefRuntime.Initialize(mainArgs, settings, Global.app);
还有就是如果设置了CEF 的CachePath,那么最好是定期清理该目录,防止CachePath过大而影响浏览器的使用。
当然如果有针对浏览器的Cookie操作及处理,最好是设定浏览器保存Cookie文件的目录:browser.SetCookiePath(path);