松鼠的博客

导航

统计

从脚本如何访问方法 / 属性是容器

MSDN地址:http://support.microsoft.com/kb/188015/zh-cn

概要

当承载 WebBrowser 控件在 VisualC++ 应用程序, 可能需要从 Web页上脚本访问方法或属性的容器。 本文介绍如何通过实现 IDocHostUIHandler 接口操作。

回到顶端

更多信息

通过实现 IDocHostUIHandler 接口, 可以控制众多用户界面功能 WebBrowser 控件宿主应用程序中。 IDocHostUIHandler 使您可以扩展动态 HTML (DHTML) 对象模型来访问方法和属性从脚本中容器。

IDocHostUIHandler GetExternal() 方法提供此功能。 当脚本在 Web页上调用 " window.external.yourMethod, " WebBrowser 控件调用您 GetExternal 方法来检索到宿主应用程序的 IDispatch 指针。 它是通过 this 指针 WebBrowser 控件是能够访问方法和属性。

一旦 WebBrowser 控件有指针指向 IDispatch 的容器, 然后调用 IDispatch::GetIDsOfNames() 以获取 DISPID 的方法或属性从脚本, yourMethod 这里调用。

最后, WebBrowser 控件调用与 DISPID IDispatch::Invoke() 检索从 GetIDsOfNames()。

下面是步骤必须按照来扩展 DHTML 对象模型能够从脚本访问容器的方法和属性:
1. 实现 IDocHostUIHandler。
2. 实现 IDocHostUIHandler::GetExternal 方法。 IDispatch 参数以与您容器这样设置:
STDMETHOD(GetExternal)(IDispatch** ppDispatch)
            {
            // Assumes you inherit from IDispatch
            *ppDispatch = (IDispatch*)this;
            (*ppDispatch)->AddRef();
            return S_OK;
            }
            
3. 从 GetIDsOfNames 返回调度 ID (DISPID) 是您方法或属性。 如果添加方法或属性使用向导, 这将完成了。
4. DISPID 是您方法或您实现 IDispatch:: Invoke 中属性实现这样:
STDMETHODIMP CAtlBrCon::Invoke(DISPID dispidMember, REFIID riid,
            LCID lcid, WORD wFlags,
            DISPPARAMS* pDispParams,
            VARIANT* pvarResult,
            EXCEPINFO* pExcepInfo, UINT* puArgErr)
            {
            switch (dispidMember)
            {
            case DISPID_MYMETHOD_OR_PROPERTY:
            // Do something here
            default:
            return E_INVALIDARG;
            }
            return S_OK;
            }
            
5. 调用方法或属性的容器从脚本所示:
 <SCRIPT LANGUAGE="VBScript">
            Sub SomeControl_OnClick
            window.external.yourMethod
            End Sub
            </SCRIPT>
            

回到顶端

参考

有关本文, 讨论技术请转到有关高级托管接口和 MSDN 联机 WebWorkshop 中 IDocHostUIHandler 文档:
http://msdn.microsoft.com/workshop/ (http://msdn.microsoft.com/workshop/)
(c) Microsoft Corporation 1998, 保留所有权利。 由 Scott, Roberts MicrosoftCorporation 供稿

posted on   Xproer-松鼠  阅读(594)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示