如何從指令碼存取容器的方法/屬性

文章翻譯 文章翻譯
文章編號: 188015 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

結論

裝載 WebBrowser 控制項,在 Visual C++ 應用程式中的時, 可能需要從 Web 網頁上的指令碼存取容器的方法或屬性。本文將告訴您如何執行這項操作藉由實作 IDocHostUIHandler 介面。

其他相關資訊

藉由實作 IDocHostUIHandler 介面,您可以控制的許多使用者介面功能 WebBrowser 控制項的裝載應用程式中。IDocHostUIHandler 也可讓您擴充動態超文字標記語言 (DHTML) 物件模型來存取方法及指令檔內從容器的屬性。

IDocHostUIHandler GetExternal() 方法提供這項功能。 當 Web 網頁上的指令碼呼叫 window.external.yourMethod"時,WebBrowser 控制項呼叫 GetExternal 方法,以擷取主控應用程式 IDispatch 的指標。它透過這個指標是 WebBrowser 控制項是可以存取方法和屬性。

一旦 WebBrowser 控制項具有容器 IDispatch 的指標,它接著會呼叫以取得方法或屬性在這種情況下從指令碼,yourMethod 呼叫的 DISPID IDispatch::GetIDsOfNames()。

最後,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 傳回分派識別碼 (DISPID) 方法或屬性。如果新增方法或屬性使用的精靈這會為您完成。
  4. 實作方法或屬性的 IDispatch::Invoke 實作中的 DISPID 如下:
    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 線上 Web 專題的 IDocHostUIHandler 文件:
http://msdn.microsoft.com/workshop/
(c) [Microsoft Corporation 1998 年,[保留所有的權限]。陳俊銘 Roberts,Microsoft 公司所佔的比重

屬性

文章編號: 188015 - 上次校閱: 2013年10月9日 - 版次: 2.1
這篇文章中的資訊適用於:
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 4.01 Service Pack 1
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.5
關鍵字:?
kbnosurvey kbarchive kbmt kbfaq kbhowto kbscript kbwebbrowser KB188015 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:188015
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com