【问题标题】:How to return IDispatch pointer to JavaScript inside a webkit browser control如何在 webkit 浏览器控件中返回指向 JavaScript 的 IDispatch 指针
【发布时间】:2012-07-06 06:02:29
【问题描述】:

我已经能够将 webkit 控件嵌入到 windows (c++) 应用程序中,并注册了我的自定义对象以供 javascript 访问(使用 JSGlobalContextRef、JSObjectMake 等)。成功测试了从 JavaScript 到 c++ 层的调用,用于返回字符串或 int 的简单方法。

现在我想公开一种自定义方法,该方法将在内部使用 COM 库并最终返回 IDispatch 指针(包装为 VARIANT 或其他形式)。如何将 IDispatch 指针转换为 JSValueRef、JSObjectRef 或 JavaScript(在 webkit 内部)可以理解的任何其他内容?

在 IE 浏览器控制世界中,我可以简单地通过“getExternal”(IDocHostUIHandler 接口)公开 IDispatch,甚至可以将其包装在 VARIANT 中并作为自定义“外部”对象内任何其他 API 的 Out-Param 返回.

【问题讨论】:

    标签: c++ windows com webkit controls


    【解决方案1】:

    这个问题没有一个简单的 n 步答案。我通过 Google 搜索找到了解决类似问题的代码,即从 SpiderMonkey 访问 COM 对象的问题。我可以给你你可能采取的方法,我不再有链接的实际代码,无论如何它是特定于 SpiderMonkey 的。

    您的 Javascript 引擎有一些方法可以使用自定义对象来扩展它,您显然已经在使用这些对象。您需要定义您正在实现的这个新方法返回另一种类型的自定义对象,并将 IDispatch 指针放在该自定义对象的自定义数据中。您的 JS 引擎不会“理解”或关心自定义对象是 ActiveX 对象的外观。您只需设置这种类型的自定义对象,以便在调用其 Frob 方法时,您的外观将调用委托给 IDispatch 上的 Frob DISPID。

    如果这个答案不清楚,请告诉我我们至少说同一种语言。

    【讨论】:

      猜你喜欢
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      相关资源
      最近更新 更多