【问题标题】:How can I prevent Chromium from writing to the console?如何防止 Chromium 写入控制台?
【发布时间】:2020-05-29 11:58:06
【问题描述】:

我正在制作一个非常简单的 Delphi 控制台 应用程序 ({$APPTYPE CONSOLE}),主窗体上只有一个 TChromiumWindow。该应用程序的目的是检索网页、处理 HTML 并将一些 JSON 输出到控制台。由于网页的性质,这不能使用纯 HTTP 请求来完成,这也需要运行一些 javascript。

一切都按预期进行,除了一个问题。 chromium 组件也会向控制台输出一些错误消息,这使我的 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 组件写入控制台呢?

【问题讨论】:

  • 您可以将 JSON 保存到文件中,而不是使用标准输出。

标签: delphi chromium-embedded cef4delphi


【解决方案1】:

TChromium 组件提供带有签名的OnConsoleMessage 事件:

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

如果您处理此事件并将Result 变量设置为true,则将禁止向控制台输出消息。

【讨论】:

  • 不幸的是,这无济于事。设置 TCefApplication 时会打印控制台消息。第一行从cef_initialize(@TempArgs, @FAppSettings, aApp.Wrap, FWindowsSandboxInfo) 输出,第二行在调用Application.Initialize 时输出。所以设置OnConsoleMessage 事件处理程序不会捕获这些。
  • 为什么在控制台代码中需要Application.Initialize
猜你喜欢
  • 1970-01-01
  • 2010-11-07
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多