com中怎么可以灵活的与JS进行交互?


如题,可以动态加载JS,也就是调用方可以任意指定调用的JS
这种交互不依赖于IE,是独立的COM,类似于调用IConnectionPoint::Advise这种方式动态挂载处理相关事件

最好提供一些简单的示例。

VC ATL JavaScript

mizuka 12 years ago

可分两个步骤实现这个功能:

  1. 把COM对象传递到JS中去 <coding-1 lang="other"> 这个需要看JS解释器的具体实现了。
    比如,IWebBrowser2控件就可以看作一个JS的解释器。在IWebBrowser2控件解释JS脚本的时候,可以可以调用一个外部的对象window.external, 这个对象不是IWebBrowser2实现的,是调用IWebBrowser2对象的EXE生成的,比如IE浏览器程序。只需要自己实现一个IDocHostUIHandler接口,然后从IWebbrowser2接口获得一个IHTMLDocument2接口,调用它的SetUIHandler方法,把IDocHostUIHandler的对象指针设置进去就可以了。 IDocHostUIHandler中有一个函数就是STDMETHOD(GetExternal)(IDispatch**),该函数返回的对象就是JS可以调用的对象window.external。注意它是一个双接口。

</coding>
2. 把JS的事件处理函数按照COM的事件连接点的方式挂到COM对象上。
比如window.external.onsize=size_handler()
为了让引出的这个对象能够进行事件挂接,必须按照COM的标准实现IConnectionPointContainer 和IConnectionPoint 接口,而且必须是双接口。
用ATL实现的话可以参见 http://msdn.microsoft.com/zh-cn/library/cc451359%28VS.71%29.aspx

伊藤千佳 answered 12 years ago

Your Answer