我找到了以Delphi形式嵌入Chrome的精彩Delphi Chromium项目。经过一些黑客攻击后,它在Delphi7中运行良好,我可以运行演示应用程序。
但是,当我使用该组件创建自己的应用程序时,我无法加载自己的网址。我收到了访问权限。
Chromium2.Browser.MainFrame.LoadUrl('http://www.example.com');
TChromium组件正在运行,我将所有DLL放在正确的位置,因为如果我设置DefaultUrl
它可以正常工作。
我在TPageControl页面中有Chromium2,并且使用按钮的OnClick事件我调用上面的代码。我得到了一个AccessViolation。大型机为nil
。
我无法找到解决方法,有人让这个工作吗?
答案 0 :(得分:4)
我仍然没有找到解决方案,但我找到了以下解决方法
procedure TForm1.lblWebsiteClick(Sender: TObject);
var MainFrame : ICefFrame;
begin
MainFrame := Chromium2.Browser.GetMainFrame;
MainFrame.LoadUrl('http://www.cookingisfun.ie');
end;
答案 1 :(得分:3)
问题是大型机仅在页面加载后加载。
首先,您需要这样做:
if Assigned(Chromium2.Browser.MainFrame)
then Chromium2.Browser.MainFrame...
但是,这不是首选的导航方式,而是应该这样做:
Chromium1.Load( theUrl );
如果您仍想使用MainFrame
,请在OnLoadEnd
事件中执行此操作。
答案 2 :(得分:2)
有类似的问题,经过几个小时就找到了问题:
如果TChromium位于应用程序的主要表单上,那么确定。
如果TChromium不在主窗体上(或在框架上),则:
打开cef.inc并删除点以定义:
{.$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP}
删除DefaultURL值,使其为空字符串。
我用Google搜索了CEF_MULTI_THREADED_MESSAGE_LOOP,但它根本没有提供太多内容。
最后,调整大小/刷新问题(即使对齐设置为alClient)。短期修复是在 crmLoadEnd事件执行类似的操作:
if crm.Height < panclient.Height then
crm.Height := panclient.Height;
答案 3 :(得分:0)
您是否在构建应用程序的文件夹中安装了所需的DLL?
您需要:libcef.dll,icudt.dll,...
在支持小组上查看此thread。
在构建/运行演示时,它们构建在此子文件夹中(* DCC_ExeOutput *):DCEF \ bin \ 这就是它与它们合作的原因......
答案 4 :(得分:0)
也有这个问题。看起来MainFrame是在框架/窗口可见时首次创建的。 但是有一个简单的方法。只需直接在TChromium对象上调用.Load('about:blank')即可。这将更早地初始化丢失的帧。