以编程方式创建ChromiumOSR时出错



我试图以编程方式创建ChromiumOSR,但我一直收到一个错误(访问冲突)。以下是导致问题的示例代码:

var
pChromiumOSR: TChromiumOSR;
begin
  pChromiumOSR := TChromiumOSR.Create(Self);
  pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd;
  pChromiumOSR.Browser.MainFrame.LoadUrl('www.google.com');
end;

问题是pChriumOSR.Browser.MainFrame始终为零。如果我这样做pChromiumOSR.load('ww.google.com');我没有收到任何错误,但它不会启动onLoadend。

有人能就我可能做错了什么给我一些建议吗?我使用的是DelphiXE2,但不确定铬的哪个版本(在哪里可以找到版本?)

您尝试使用Load方法加载页面是正确的。另一个错误,由于未创建Browser实例而失败。这是因为TChromiumOSR被设计为设计时组件,而不是动态创建的。

现在,创建Browser实例的唯一位置是Loaded方法,它是在从流加载组件的父窗体后为其调用的。由于是动态创建的,因此Browser实例永远不会创建。

出于某种原因,CreateBrowser方法(创建Browser实例)也被声明为private,这会使其调用稍微复杂一些(除非您决定修改源并将其公开)。如果您不想更改DCEF源代码,可以使用类助手来提供对CreateBrowser方法的访问:

uses
  ceflib, cefvcl;
type
  TChromiumOSRHelper = class helper for TCustomChromiumOSR
  public
    procedure CreateBrowserInstance;
  end;
implementation
{ TChromiumOSRHelper }
procedure TChromiumOSRHelper.CreateBrowserInstance;
begin
  Self.CreateBrowser;
end;

然后要创建Browser实例,请在第一次访问Browser实例之前添加CreateBrowserInstance调用(此处为Load方法):

var
  pChromiumOSR: TChromiumOSR;
begin
  pChromiumOSR := TChromiumOSR.Create(Self);
  pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd;
  pChromiumOSR.CreateBrowserInstance;
  pChromiumOSR.Load('www.google.com');
end;

相关内容

  • 没有找到相关文章

最新更新