4

我发现了出色的Delphi Chromium项目,用于以 Delphi 形式嵌入 Chrome。经过一些黑客攻击后,它在 Delphi7 中运行良好,我可以运行演示应用程序。

但是,当我使用该组件编写自己的应用程序时,我无法加载自己的 url。我遇到访问冲突。

Chromium2.Browser.MainFrame.LoadUrl('http://www.example.com');

TChromium 组件正在工作,我将所有 DLL 放在正确的位置,因为如果我设置DefaultUrl它就可以正常工作。

我在 TPageControl 页面中有 Chromium2,并通过按钮的 OnClick 事件调用上述代码。我得到一个 AccessViolation。大型机是nil.

我找不到解决方法,有没有人解决这个问题?

4

5 回答 5

4

我仍然没有找到解决方案,但我找到了以下解决方法

procedure TForm1.lblWebsiteClick(Sender: TObject);
var MainFrame : ICefFrame;
begin
  MainFrame := Chromium2.Browser.GetMainFrame;
  MainFrame.LoadUrl('http://www.cookingisfun.ie');
end;
于 2011-09-17T13:44:51.587 回答
3

问题是大型机仅在页面加载后加载。

一方面,您需要执行以下操作:

if Assigned(Chromium2.Browser.MainFrame)
    then  Chromium2.Browser.MainFrame...

但是,这不是首选的导航方式,而是您应该这样做:

Chromium1.Load( theUrl );

如果您仍想使用MainFrame,请在OnLoadEnd事件中使用。

于 2011-09-17T16:32:58.330 回答
2

有类似的问题,并在几个小时后找到了问题:

  1. 如果 TChromium 在应用程序的主窗体上,那么可以。

  2. 如果 TChromium 不在主窗体上(或在框架上),则:

    1. 打开 cef.inc 并删除点以定义:

      {.$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} 
      
    2. 删除 DefaultURL 值,使其为空字符串。

我用谷歌搜索了 CEF_MULTI_THREADED_MESSAGE_LOOP 但它根本没有想出太多。

最后,有调整大小/刷新问题(即使对齐设置为 alClient)。短期修复在
crmLoadEnd 事件中执行如下操作:

     if crm.Height < panclient.Height then
        crm.Height := panclient.Height;
于 2011-09-24T13:03:00.273 回答
0

在构建应用程序的文件夹中是否有所有必需的 DLL?

您需要:libcef.dll、icudt.dll、...

在他们的支持小组上检查这个线程。


当您构建/运行演示时,它们会构建在此子文件夹 (*DCC_ExeOutput*) 中:DCEF\bin\ 这就是它与它们一起使用的原因...

于 2011-09-17T09:21:05.057 回答
0

也有这个问题。似乎 MainFrame 是在框架/窗口可见时首先创建的。但是有一个简单的方法。只需在您的 TChromium 对象上直接调用 .Load('about:blank') 即可。这将更早地初始化丢失的帧。

于 2014-07-07T07:58:43.767 回答