2011-10-02 64 views
0

我有一个hyrid类型的应用程序(web和表单)。这是一个.net紧凑型框架应用程序。在其中一个表单中,我有一个WebBrowser控件。如何在JavaScript中引用可以传递到浏览器外的对象(COM)

我想在WebBrowser控件和主机/包含WebBrowser控件的窗体之间进行通信。

为此,我计划在C++中为Windows移动设备编译创建一个Activex(COM)对象。

我打算使用JavaScript在WebBrowser控件中显示的网页上创建ActiveX控件的实例。

我怎样才能得到这个ActiveX控件的引用,然后我可以发送到表单?


我的目标是发送包含WebBrowser控件这样既网页和表格可以使用/访问ActiveX控件的同一实例ActiveX控件实例到Windows参考的移动形式。

我创建了一种从ActiveX控件向窗体发送字符串的方法。有没有办法将ActiveX控件的引用转换为字符串,然后将字符串传递给窗体并重新创建对窗体端的对象实例的引用?

我希望这是有道理的。

回答

0

,你可以得到使用这样的一个IDispatch参考窗口:

CComPtr<IWebBrowser2> m_webBrowser(/* create, assign, whatever to get the pointer */ 
CComQIPtr<IHTMLWindow2> m_htmlWin; 
CComPtr<IDispatch> m_htmlDocDisp; 
CComQIPtr<IDispatch> m_htmlWindDisp; 

m_webBrowser->get_Document(&m_htmlDocDisp); 
CComQIPtr<IHTMLDocument2> doc(m_htmlDocDisp); 
assert(doc); 
doc->get_parentWindow(&m_htmlWin); 
assert(m_htmlWin); 

m_htmlWindDisp = m_htmlWin; 
assert(m_htmlWin); 

一旦你有,你可以使用IDispatch方法要么查询窗口对象的属性值,也可以设置这样一个属性的值。例如,如果您创建一个公开方法和属性的IDispatch对象,那么您可以使用m_htmlWindDisp对象以PROPERTYPUTREF将该对象作为“foo”进行调用,则可以使用“window.foo”从javascript访问该对象。 Alternatley,使用PROPERTYGET调用,您可以获得您在窗口上设置的对象的IDispatch句柄,例如“window.foo = someFooBaredObject”

希望有道理。

相关问题