您的位置:首页 > Web前端 > JavaScript

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

2010-05-13 14:19 441 查看
ATL控件嵌入在一个网页内, 在ATL控件内获取网页的IWebBrowser2指针, 并获取对应的网页元素对象, 如Document, Script等

CComPtr<IWebBrowser2>   m_pIWebBrowser;
CComPtr<IHTMLDocument2>   m_pDocument;
CComPtr<IDispatch>   m_pScript;
BOOL GetIWebBrowser()
{
IOleClientSite* pClientSite;
GetClientSite(&pClientSite);

if (pClientSite == NULL)
return FALSE;
CComQIPtr<IServiceProvider> 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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐