我正在尝试以编程方式创建ChromiumOSR,但我一直收到错误(访问冲突)。 以下是导致问题的示例代码:
var
pChromiumOSR: TChromiumOSR;
begin
pChromiumOSR := TChromiumOSR.Create(Self);
pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd;
pChromiumOSR.Browser.MainFrame.LoadUrl('www.google.com');
end;
问题是pChromiumOSR.Browser.MainFrame总是为零。如果我做 pChromiumOSR.load( 'www.google.com');我没有得到任何错误,但它没有触发onLoadend。
任何人都可以就我可能做错的事给我任何建议吗? 我正在使用Delphi XE2,但不确定哪个版本的铬(我在哪里可以找到该版本?)
答案 0 :(得分:5)
您尝试使用Load
方法加载页面是正确的。另一个是错误的并且因为未创建Browser
实例而失败。这是因为TChromiumOSR
被设计为设计时组件而不是动态创建。
现在,创建Browser
实例的唯一位置是Loaded
方法,该方法在从流加载其父表单后调用该组件。由于您是动态创建的,因此永远不会创建Browser
实例。
由于某种原因,CreateBrowser
方法(创建Browser
实例)也被声明为私有,这使得它的调用变得复杂(除非您决定修改源并使其公开)。如果您不想更改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
实例,请在第一次访问CreateBrowserInstance
实例(此处为Browser
方法)之前添加Load
调用:
var
pChromiumOSR: TChromiumOSR;
begin
pChromiumOSR := TChromiumOSR.Create(Self);
pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd;
pChromiumOSR.CreateBrowserInstance;
pChromiumOSR.Load('www.google.com');
end;