Error on LoadURL with TChromium

岁酱吖の 提交于 2020-01-09 10:51:33

问题


I found the brilliant Delphi Chromium project for embedding Chrome in a Delphi form. It works well in Delphi7 after a bit of hacking and I can get the demo app running.

However when I do my own app with the component, I can't load my own url. I get a access violation.

Chromium2.Browser.MainFrame.LoadUrl('http://www.example.com');

The TChromium component is working and I have all the DLLs in the right place, since if I set DefaultUrl it works fine.

I have Chromium2 in a TPageControl page and with the OnClick event of a button I call the above code. I get an AccessViolation. Mainframe is nil.

I can't find a way around this, has anyone got this to work?


回答1:


I still haven't found a resolution but I found the following work around

procedure TForm1.lblWebsiteClick(Sender: TObject);
var MainFrame : ICefFrame;
begin
  MainFrame := Chromium2.Browser.GetMainFrame;
  MainFrame.LoadUrl('http://www.cookingisfun.ie');
end;



回答2:


The problem is that mainframe only loads after the page has loaded.

For one thing, you need to do:

if Assigned(Chromium2.Browser.MainFrame)
    then  Chromium2.Browser.MainFrame...

However, that is not the preferred way to navigate, but instead you should do:

Chromium1.Load( theUrl );

If you still want to use MainFrame, do it in OnLoadEnd event.




回答3:


Had similar problems and after quite a few hours located the problem:

  1. If TChromium is on the main form of the application then ok.

  2. If TChromium is not on main form (or on a frame) then:

    1. Open cef.inc and remove the dot to define:

      {.$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} 
      
    2. Remove DefaultURL value so it is an empty string.

I googled CEF_MULTI_THREADED_MESSAGE_LOOP but it didn't come up with much at all.

Lastly, had resizing/refreshing problems (even with alignment set to alClient). Short term fix is within
crmLoadEnd event do something like:

     if crm.Height < panclient.Height then
        crm.Height := panclient.Height;



回答4:


Do you have alll the required DLL in the folder where your application is built?

You need: libcef.dll, icudt.dll, ...

Check this thread on their support group.


When you build/run the demos, they are built in this subfolder (*DCC_ExeOutput*): DCEF\bin\ which is why it works with them...




回答5:


Had this problem as well. It seems the MainFrame is first created when the frame/window gets visible. But there is an easy way around it. Just call .Load('about:blank') directly on your TChromium object. This will initialize the missing frame earlier.



来源:https://stackoverflow.com/questions/7453345/error-on-loadurl-with-tchromium

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!