OCX初始化的時候會調用SetClientSite,會傳入IOleClientSite對象。
1 CComQIPtr<IOleControlSite, &IID_IOleControlSite> spSite(pClientSite); 2 CComDispatchDriver ecDisp; 3 spSite->GetExtendedControl(&ecDisp);
如上代碼,根據IOleClientSite對象,我們可以得到IOleControlSite對象;再通過IOleControlSite對象的GetExtendedControl方法就可以得到OCX在網頁中的DOM對象。
注意:如果通過javascript代碼createElement、appendChild方式動態創建OCX時,在IE11中SetClientSite裡調用GetExtendedControl可以獲取到對象,但在IE9中是獲取不到對象的(其他版本未測)。如何動態創建OCX,又能使SetClientSite裡調用GetExtendedControl能獲取到對象,看我另一篇文章。