使用TChromium的LoadURL出错

时间:2011-09-17 07:51:15

标签: delphi delphi-7 tchromium

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

但是,当我使用该组件创建自己的应用程序时,我无法加载自己的网址。我收到了访问权限。

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

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

我在TPageControl页面中有Chromium2,并且使用按钮的OnClick事件我调用上面的代码。我得到了一个AccessViolation。大型机为nil

我无法找到解决方法,有人让这个工作吗?

5 个答案:

答案 0 :(得分:4)

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

procedure TForm1.lblWebsiteClick(Sender: TObject);
var MainFrame : ICefFrame;
begin
  MainFrame := Chromium2.Browser.GetMainFrame;
  MainFrame.LoadUrl('http://www.cookingisfun.ie');
end;

答案 1 :(得分:3)

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

首先,您需要这样做:

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

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

Chromium1.Load( theUrl );

如果您仍想使用MainFrame,请在OnLoadEnd事件中执行此操作。

答案 2 :(得分:2)

有类似的问题,经过几个小时就找到了问题:

  1. 如果TChromium位于应用程序的主要表单上,那么确定。

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

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

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

  3. 我用Google搜索了CEF_MULTI_THREADED_MESSAGE_LOOP,但它根本没有提供太多内容。

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

         if crm.Height < panclient.Height then
            crm.Height := panclient.Height;
    

答案 3 :(得分:0)

您是否在构建应用程序的文件夹中安装了所需的DLL?

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

在支持小组上查看此thread


在构建/运行演示时,它们构建在此子文件夹中(* DCC_ExeOutput *):DCEF \ bin \ 这就是它与它们合作的原因......

答案 4 :(得分:0)

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