【问题标题】:Invoking JavaScript Method via COM Interface通过 COM 接口调用 JavaScript 方法
【发布时间】:2011-05-23 16:23:39
【问题描述】:

我正在开发一个连接 Matlab 和 Google 地球插件的项目。

我的想法是使用 COM 接口,其中 MATLAB 作为 COM-Client,Internet Explorer 9 中的 Google Earth Plugin 作为 COM-Sever。

但直到现在,我仍然不知道如何从 MATLAB 调用 JavaScript 方法,以便在 Internet Explorer 中更新 Google 地球的视图。

是否可以通过 COM 调用 JavaScript 方法?

我的第二个想法是基于 InternetExplorer 构建一个自定义的网络浏览器,然后嵌入自定义的 COM 方法和属性,这样它就可以与 Google Earth 一起从外部应用程序调用。

任何帮助将不胜感激。

问候, 万

【问题讨论】:

    标签: javascript com activex google-earth google-earth-plugin


    【解决方案1】:

    似乎唯一受支持的 Google 地球 API 是 JavaScript API。因此,您为此嵌入 Internet Explorer 的方法听起来很合理。

    我对 MATLAB 的结尾不太熟悉,但假设您可以嵌入 Web 浏览器控件,那么您应该能够开始调用脚本。

    在最低级别,IE Web 浏览器实现了 IWebBrowser2 接口。此接口公开一个 Document 属性,该属性返回一个 IHTMLDocument2 接口。调用 IHTMLDocument2::parentWindow 以获取 IHTMLWindow2 接口。

    一旦你拥有了 IHTMLWindow2,据我所知,你有几个选择。您的脚本可以调用 IHTMLWindow2::execScript。或者,您的顶级 JavaScript 函数应该通过继承的 IDispatch 作为 IHTMLWindow2 接口上的方法可用:如果您需要返回值,则特别有用。

    一些使用 execScript 的 Delphi 代码:http://www.delphidabbler.com/articles?article=21

    一些直接使用 IDispatch 的 .NET Framework 代码(参见注释掉的更复杂的代码示例):http://www.west-wind.com/weblog/posts/2008/Sep/27/Calling-JavaScript-functions-in-the-Web-Browser-Control

    长话短说,基本上你需要这样做:

    myWebBrowser.Document.parentWindow.MyJavaScriptFunction()

    或者这个:

    myWebBrowser.Document.parentWindow.execScript("MyJavaScriptFunction();", "JavaScript")

    【讨论】:

    • 感谢您的回复。我确实检查了 com 对象的可用方法,但不知何故监督了 execScript 方法。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2010-11-29
    • 2014-07-02
    • 2018-09-15
    • 2021-09-27
    • 2013-12-29
    • 2015-02-21
    相关资源
    最近更新 更多