【问题标题】:Defaultinterface in TChromium is missing缺少 TChromium 中的默认接口
【发布时间】:2011-07-27 11:31:06
【问题描述】:

我们正在尝试将内置浏览器组件从 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。

问候 罗兰·本特松

【问题讨论】:

  • 你确定TChromium 甚至支持IOleObject
  • Chromium 可能不支持IOleObject。你用TWebBrowser.DefaultInterface 做什么?如果您有特定问题,请尝试更详细地描述它。也许使用 Chromium 可以以不同的方式实现相同的结果。
  • 我赞同 TOndrej 的建议。如果“Chromium”与“Chrome”浏览器有任何关系,那么它很可能支持您可能想做的任何事情。但它绝对不是TWebBrowser 的直接替代品。即:为 TWebBrowser 设计的复制粘贴代码将不起作用。

标签: delphi com delphi-2007 twebbrowser


【解决方案1】:

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

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

【讨论】:

  • 是的,这正是我所怀疑的。但它应该是javascript和Delphi之间通信的某种方式?
  • 正如我所说,我自己没有使用过 TChromium。我只是查看了它的code.google.com/p/delphichromiumembedded/ 存储库中的一些源文件。那里没有文档,我无法判断源内 cmets 的质量。最好的办法是使用这里的信息:code.google.com/p/chromiumembedded,因为这就是 TChromium 的包装。
  • 查看并试用TCefRTTIExtension。到目前为止,我从代码中了解到的很少,它声明了 V8 Javascript 引擎的本机扩展,并且似乎使用 RTTI 来解析属性和方法名称以调用您的 Delphi 代码。
  • 使用 D2010 和扩展 RTTI 似乎更容易。不幸的是,我使用的是 D2007,在为 Unicode 重写 Bold for Delphi 之前,我现在无法升级。
【解决方案2】:

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

EexecuteScriptAndReturnValue 之类的功能似乎也在进行中,但在撰写本文时,它们还没有包含在主干中。

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

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多