【问题标题】:How to destroy the Tchromium (Delphi) component dynamically created?如何销毁动态创建的 Tchromium (Delphi) 组件?
【发布时间】:2015-07-26 04:54:09
【问题描述】:

如何销毁动态创建的 Tchromium 组件?我在 DLL 中使用,在不释放 DLL 的情况下多次创建和销毁它所必需的组件,问题是没有释放内存并且无法清除缓存文件夹。如果我使用 CefShutDown 出现问题及时重新创建浏览器。我正在使用最新版本的 DCEF3 。 像这样动态创建:

crm := TChromium.Create(Form1);
crm.SetParentComponent (Panel2);
crm.Align := alClient;

破坏尝试了多种方式:

FreeAndNil(crm);
crm.free;
crm := nil;
CefShutDown;

CefShutDown 及时解决破坏,当我再次尝试重新创建组件而不释放我的 DLL 时,问题正在发生。

还解决了我在使用 UserAgent 时遇到的另一个问题,无法更改浏览器的娱乐性。

感谢任何解决我问题的建议。

【问题讨论】:

  • Related to CEF1;我不确定他们是否在 CEF3 中添加了一些缓存清理支持。
  • 创建浏览器后,您可以更改 UserAgent 吗?我想每次导航都改变这个信息。如果是这样,这将是我的问题的解决方案
  • 否,仅在初始化时设置。但是您可以处理OnBeforeResourceLoad 事件并修改每个请求的用户代理标头字段。
  • Tlama 朋友,你有我如何使用 OnBeforeResourceLoad 的例子吗?

标签: delphi embedded components destroy tchromium


【解决方案1】:

此行为符合设计。 Chromium 问题跟踪器上的Issue 1237 与您的问题相同。相关摘录是:

CefInitialize/CefShutdown 不能在同一进程中多次调用。您可以在不重新初始化 CEF 的情况下创建/销毁多个浏览器窗口。

您必须避免致电CefShutDown

【讨论】:

  • 我觉得这个组件非常好,如果可能的话完全销毁它并动态重新创建它会很棒
  • 随意销毁组件的实例,但不要调用CefShutDown
猜你喜欢
  • 2020-03-01
  • 2019-02-18
  • 2015-10-19
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 2020-02-09
相关资源
最近更新 更多