从IWebBrowser2获取IHTMLDocument2的Script对象,执行指定的JS脚本

ATL控件嵌入在一个网页内, 在ATL控件内获取网页的IWebBrowser2指针, 并获取对应的网页元素对象, 如Document, Script等

CComPtr m_pIWebBrowser; CComPtr m_pDocument; CComPtr m_pScript; BOOL GetIWebBrowser() { IOleClientSite* pClientSite; GetClientSite(&pClientSite); if (pClientSite == NULL) return FALSE; CComQIPtr pISP(pClientSite); if (pISP == NULL) return FALSE; pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,(void **)&m_pIWebBrowser); if (m_pIWebBrowser == NULL) return FALSE; //取得IHTMLDocument2 m_pIWebBrowser->get_Document((IDispatch**)&m_pDocument); if (m_pDocument == NULL) return FALSE; //获取脚本对象 m_pDocument->get_Script(&m_pScript); if (m_pScript == NULL) return FALSE; return TRUE; } //根据获取到的脚本对象, 可执行一段脚本函数 void InvokeWebScript(BSTR srciptName) { CComBSTR bstrMember(srciptName); DISPID dispid; HRESULT hr; if(m_pScript!=NULL) { hr = m_pScript->GetIDsOfNames(IID_NULL,&bstrMember,1,LOCALE_SYSTEM_DEFAULT,&dispid); if (SUCCEEDED(hr)) { DISPPARAMS dispparams; memset(&dispparams, 0, sizeof(DISPPARAMS)); dispparams.cArgs = 0; dispparams.cNamedArgs = 0; EXCEPINFO excepInfo; memset(&excepInfo, 0, sizeof(EXCEPINFO)); CComVariant vaResult; // initialize to invalid arg UINT nArgErr = (UINT)-1; // 执行js代码 hr = m_pScript->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr); } } }

你可能感兴趣的:(C++)