Как я могу запретить Chromium писать в консоль? - PullRequest
0 голосов
/ 29 мая 2020

Я делаю очень простое Delphi консольное приложение ({$APPTYPE CONSOLE}) с одним TChromiumWindow в главной форме. Назначение приложения - получить веб-страницу, обработать HTML и вывести на консоль некоторое количество JSON. Это невозможно сделать с использованием простых HTTP-запросов из-за характера веб-страницы, для чего также требуется запуск некоторых javascript.

Все работает должным образом, за исключением одной проблемы. Компоненты хрома также выводят на консоль некоторые сообщения об ошибках, что делает мой JSON недействительным! Например, я всегда получаю следующие два сообщения об ошибках при запуске:

[0529/133941.811:ERROR:gpu_process_transport_factory.cc(990)] Lost UI shared context.
[0529/133941.832:ERROR:url_request_context_getter_impl.cc(130)] Cannot use V8 Proxy resolver in single process mode.

Конечно, лучшим решением было бы вообще не получать никаких сообщений об ошибках, но по нескольким причинам (которые в большинстве случаев должны делать с устаревшим кодом компании) Я не могу, например, отключить режим одного процесса.

Поэтому лучше всего не допускать вывода этих сообщений об ошибках на консоль. Я пробовал установить

GlobalCEFApp.LogSeverity := LOGSEVERITY_DISABLE;

, но это не помогло. Указание файла журнала с использованием GlobalCEFApp.LogFile тоже не помогает.

Итак, как я могу вообще предотвратить запись компонентов Chromium в консоль?

1 Ответ

1 голос
/ 29 мая 2020

Компонент TChromium предоставляет событие OnConsoleMessage с подписью:

 TOnConsoleMessage = procedure(Sender: TObject; const browser: ICefBrowser; 
                               const message, source: ustring; line: Integer; 
                               out Result: Boolean) of object;  

Если вы обрабатываете это событие и устанавливаете для переменной Result значение true сообщение вывод на консоль подавляется.

...