我目前正在尝试使用 TChromiumFMX 在 Firemonkey 中创建一个基本的 Web 浏览器。我最初发布到该项目的小组,但几周后没有收到任何回复。
尝试在运行时创建 TChromiumFMX 时似乎存在问题。我最初尝试从我的应用程序中创建它。由于这引发了访问冲突错误,然后我尝试了使用导出过程的 DLL 路由。
错误就是这样;异常类:EAccessViolation 异常消息:模块中地址的访问冲突。读取地址 00000000。
第一个地址似乎是随机的,取决于我在代码中所做的更改(稍作调整以尝试修复它,但均无济于事),而第二个地址始终为 00000000。例如;“ChromDLL.dll”中地址 0117B40A 的访问冲突。读取地址 00000000。
代码如下;
[Global Variables]
Chrom : TChromiumFMX;
[...]
Procedure Chrom_Create(AlignTo : TAlignLayout; ParentIn :
TFmxObject; DefaultURLIn : String); export;
begin
Chrom := TChromiumFMX.Create(nil);
Chrom.Parent := ParentIn;
Chrom.Align := AlignTo;
Chrom.Options.CaretBrowsingEnabled := True;
Chrom.Options.ThreadedCompositingEnabled := True;
Chrom.Options.EncodingDetectorEnabled := True;
Chrom.Options.FullscreenEnabled := True;
Chrom.Options.FileAccessFromFileUrlsAllowed := True;
Chrom.DefaultUrl := DefaultUrlIn;
end;
那来自 DLL 版本,但我在应用程序版本中编写的代码非常相似,并且也因类似的访问冲突而失败。
此问题仅在 FMX/Firemonkey 组件中出现,而在使用类似代码的 VCL 版本中不会出现(其中 TChromiumFMX 被 TChromium 替换)。
我很好奇是否有人发现了解决此问题的方法?我已经搜索和搜索了几个星期,还没有找到解决方案,甚至在谷歌代码的问题页面上谈论类似问题的人很少。我确实尝试使用“应用程序内”版本的代码将它的所有者和父对象强制分配给一个对象,但同样没有这样的运气。当我告诉它导航到 URL 时,会发生访问冲突。
我确实注意到我必须在创建表单时将“Application.OnIdle”调用为“doOnIdleEvent”并将“FLoading”调用为“False”,以便在设计时创建的初始浏览器窗口能够运行,但我已经当我在运行时创建一个时,我没有做同样的事情。
想法?
编辑:修正了一个不应该出现的错字