Browser.Load порождает новый процесс при попытке загрузить новый URL - PullRequest
0 голосов
/ 09 февраля 2019

Я встроил браузер CefSharp для приложения WPF, в котором я пытаюсь загрузить веб-страницу.Также я связал объект JavaScript с помощью функции RegisterJsObject.Это необходимо, поскольку JS веб-страницы выполняет вызовы в собственное приложение.

Я реализовал WatchDogTimer для переключения на страницу с ошибкой, если загрузка страницы занимает время / любую ошибку.Проблема заключается в том, что при попытке загрузить страницу ошибки в случае тайм-аута она убивает существующий файл CefSharp.BrowserSubprocess.exe и создает новый.Но это приводит к потере привязки JavaScript, поэтому нельзя делать вызовы из JS в Native App.

Есть ли способ избежать создания нового процесса CefSharp.BrowserSubprocess.exe?

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете использовать класс 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

...