Получение ошибок при создании 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;