我发现了一个出色的Delphi Chromium项目,用于将Chrome嵌入到Delphi表单中。经过一点黑客攻击,它在Delphi7中运行良好,我可以运行演示应用程序。
然而,当我使用该组件创建自己的应用程序时,我无法加载自己的url。我有访问权限被侵犯。
Chromium2.Browser.MainFrame.LoadUrl('http://www.example.com');
TChromium组件正在工作,我将所有DLL都放在正确的位置,因为如果我设置DefaultUrl
,它可以正常工作。
我在TPageControl页面中有Chromium2,通过按钮的OnClick事件,我调用上面的代码。我收到访问违规。大型机是nil
。
我找不到解决这个问题的方法,有人能解决这个问题吗?
我仍然没有找到解决方案,但我发现了以下关于的工作
procedure TForm1.lblWebsiteClick(Sender: TObject);
var MainFrame : ICefFrame;
begin
MainFrame := Chromium2.Browser.GetMainFrame;
MainFrame.LoadUrl('http://www.cookingisfun.ie');
end;
问题是大型机只有在页面加载后才加载。
有一件事,你需要做:
if Assigned(Chromium2.Browser.MainFrame)
then Chromium2.Browser.MainFrame...
然而,这不是首选的导航方式,但您应该这样做:
Chromium1.Load( theUrl );
如果您仍然想使用MainFrame
,请在OnLoadEnd
事件中执行。
有类似的问题,几个小时后找到了问题:
-
如果TChromium是应用程序的主要形式,那么可以。
-
如果TChromium不在主窗体上(或在框架上(,则:
-
打开cef.inc并移除点以定义:
{.$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP}
-
删除DefaultURL值,使其为空字符串。
-
我在谷歌上搜索了CEF_MULTI_THREADED_MESSAGE_LOOP,但并没有得到太多结果。
最后,出现了调整大小/刷新问题(即使对齐设置为alClient(。短期修复在
内crmLoadEnd事件执行类似的操作:
if crm.Height < panclient.Height then
crm.Height := panclient.Height;
在构建应用程序的文件夹中是否有所有必需的DLL?
您需要:libcef.dll,icudt.dll,…
在他们的支持组上检查此线程。
当您构建/运行演示时,它们将在以下子文件夹(*DCC_ExeOutput*(中构建:DCEF\bin\这就是为什么它对他们有效。。。
也有这个问题。主框架似乎是在框架/窗口可见时首次创建的。但有一个简单的方法可以解决这个问题。只需直接在TChromium对象上调用.Load("about:black"(。这将提前初始化丢失的帧。