2

我们正在尝试将内置浏览器组件从 TWebBrowser 更改为TChromium。它主要用于显示来自 Google 和 Bing 的地图。从 javascript 到 Delphi 的通信是通过 COM 完成的。

尝试将浏览器更改为 TChromium 时,无法编译此代码。

if supports(fBrowser.defaultInterface, IOleObject, fOLE) then

因为 TChromium 中缺少 defaultInterface。

编辑: 是否仍然可以使用 Chromium 从 javascript 到 Delphi 进行通信?我知道它们不兼容,我必须重写代码。我只想知道如何从 javascript 到 delphi 获得结果。注意我使用的是 Delphi 2007,所以不能使用扩展的 RTTI。

问候罗兰·本特森

4

2 回答 2

5

我自己从未使用过它,但它TChromium似乎是“Chromium”网络浏览器的包装器,而TWebBrowserDelphi 的原件是 IE 浏览器的包装器。

TWebBrowser.defaultInstance为您提供 IE 浏览器的 COM 对象。对于您显然可以使用的 Chromium 浏览器TChromium.Browser,它为您提供了一个对象类型ICefBrowser。人们TChromium很聪明地不命名属性defaultInstance,因为有很多代码从返回defaultInstance到其他接口类型进行转换:如果TChromium.Browser命名相同,则转换将在运行时编译并失败。因为 IE 浏览器显然不是 Chrome 浏览器,我怀疑 Chromium 浏览器是否完全实现了所有 IE 接口。

于 2011-07-27T11:47:22.923 回答
1

使用 TChromium,您可以通过ExecuteJavaScript. 您可以从脚本中调用 Delphi 代码,您可以使用这些代码将 JavaScript 函数的返回值发送回 Delphi。请参阅此问题和我的回答,了解如何使用扩展来执行此操作。

似乎还有一些功能正在进行中,EexecuteScriptAndReturnValue但在撰写本文时,它们并未包含在主干中。

关于TWebBrowser.DefaultInterface我同意 Cosmin 的观点:最好的类比可能TChromium.Browser是您可以从那里访问框架和随后的 DOM 等。

于 2011-08-03T11:20:33.540 回答