我正在尝试以编程方式创建ChromiumOSR,但我一直收到错误(访问冲突).以下是导致问题的示例代码:
var
pChromiumOSR: TChromiumOSR;
begin
pChromiumOSR := TChromiumOSR.Create(Self);
pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd;
pChromiumOSR.Browser.MainFrame.LoadUrl('www.google.com');
end;
Run Code Online (Sandbox Code Playgroud)
问题是pChromiumOSR.Browser.MainFrame总是为零.如果我做pChromiumOSR.load('www.google.com'); 我没有得到任何错误,但它没有触发onLoadend.
谁能给我任何关于我可能做错的建议?我正在使用Delphi XE2,但不确定哪个版本的铬(我在哪里可以找到该版本?)
您尝试使用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;
Run Code Online (Sandbox Code Playgroud)
然后创建一个Browser实例CreateBrowserInstance在第一次访问Browser实例之前添加调用(这是Load方法):
var
pChromiumOSR: TChromiumOSR;
begin
pChromiumOSR := TChromiumOSR.Create(Self);
pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd;
pChromiumOSR.CreateBrowserInstance;
pChromiumOSR.Load('www.google.com');
end;
Run Code Online (Sandbox Code Playgroud)