Получение ошибок при создании ChromiumOSR программно

Я пытаюсь создать 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, но не уверен, какая версия хрома (где я могу найти версию?)

Спасибо за вашу помощь.

1 ответ

Решение

Ваша попытка использовать Load Способ загрузки страницы был правильным. Другой был неправ и потерпел неудачу, потому что Browser Экземпляр не был создан. Это потому что TChromiumOSR был разработан, чтобы быть компонентом времени проектирования, а не создаваться динамически.

Теперь единственное место, где Browser Экземпляр создан Loaded метод, который вызывается для компонента после загрузки его родительской формы из потока. И так как вы создаете его динамически, Browser Экземпляр никогда не создается.

По некоторым причинам также CreateBrowser метод (который создает Browser instance) объявляется как 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 экземпляр добавить CreateBrowserInstance позвонить до первого доступа к Browser экземпляр (который здесь Load метод):

var
  pChromiumOSR: TChromiumOSR;
begin
  pChromiumOSR := TChromiumOSR.Create(Self);
  pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd;
  pChromiumOSR.CreateBrowserInstance;
  pChromiumOSR.Load('www.google.com');
end;
Другие вопросы по тегам