这几天,正好要用的ActiveX和JS页面进行交互,起初也是一点眉目找不到,上网查了N多资料,并按照方法,总算以代码的方式实现了,成功的调用JS页面的函数,现在把代码贴出来,希望对大家有所帮助! 需要的头文件 #include <Mshtml.h> #include <atlconv.h> IWebBrowserApp *m_spBrowser; CComPtr< IDispatch > spDisp; CComDispatchDriver m_Func;// IServiceProvider *isp, *isp2 = NULL; HRESULT hr; IOleClientSite * iPoleCliSite = GetClientSite(); if(NULL == iPoleCliSite) AfxMessageBox(L"get client site failed"); int data = (int)iPoleCliSite; //CString str = L""; //str.Format(L"%d",data); //AfxMessageBox(str); hr = iPoleCliSite->QueryInterface(IID_IServiceProvider,reinterpret_cast<void **>(&isp)); if(FAILED(hr)) AfxMessageBox(L"QueryInterface Failed"); // AfxMessageBox(L"1"); hr = isp->QueryService(SID_STopLevelBrowser,IID_IServiceProvider,reinterpret_cast<void **>(&isp2)); if(FAILED(hr)) AfxMessageBox(L"QueryService Failed"); //AfxMessageBox(L"2"); hr = isp2->QueryService(SID_SWebBrowserApp,IID_IWebBrowser2,reinterpret_cast<void **>(&m_spBrowser)); if(FAILED(hr)) AfxMessageBox(L"IID_IWebBrowser2 failed"); //AfxMessageBox(L"3"); hr = m_spBrowser->get_Document(&spDisp); if(FAILED(hr)) AfxMessageBox(L"getDocument failed"); CComQIPtr<IHTMLDocument2> spDoc = spDisp; m_Func = spDisp; //AfxMessageBox(L"4"); //获取函数指针 CComPtr<IDispatch> pScript; hr=spDoc->get_Script(&pScript); CComBSTR bstrMember("show"); //这个show是JS页面函数的名字 DISPID dispid; hr=pScript->GetIDsOfNames (IID_NULL,&bstrMember,1,LOCALE_SYSTEM_DEFAULT,&dispid); hr = pScript.InvokeN(dispid,NULL,0); isp->Release(); isp2->Release(); m_spBrowser->Release(); iPoleCliSite->Release();