|
IWebBrowser2调用javascript
[复制链接]
先看下代码,如下
void MyBrowser::CallJavaScript(OLECHAR FAR* funcName)
{
HRESULT hr;
IDispatch* pDocDispatch = NULL;
IDispatch* pScriptDispatch = NULL;
IHTMLDocument2* pDocument = NULL;
DISPID dispid;
m_pBrowser->get_Document(&pDocDispatch);
if(SUCCEEDED(hr))
{
hr = pDocDispatch->QueryInterface(IID_IHTMLDocument2,(void**)&pDocument);
if(SUCCEEDED(hr))
{
hr = pDocument->get_Script(&pScriptDispatch);
if(SUCCEEDED(hr))
{
CComBSTR funNameStr(funcName);
hr = pScriptDispatch->GetIDsOfNames(IID_NULL, &funNameStr, 1,LOCALE_SYSTEM_DEFAULT, &dispid);
if(SUCCEEDED(hr))
{
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof(dispparams));
dispparams.cArgs = 0; nParamCount;
dispparams.rgvarg = new VARIANT[dispparams.cArgs];
dispparams.cNamedArgs = 0;
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
CComVariant vaResult;
UINT nArgErr = (UINT)-1; initialize to invalid arg
hr = pScriptDispatch->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&dispparams,NULL,&excepInfo,&nArgErr);
}
}
}
}
}
m_pBrowser 是IWebBrowser2对象。在这里GetIDsOfNames总是执行失败,返回值的提示是未知的名称,好像是没有找到相关函数,但是网页里面的确是有这个函数的。奇怪的是,当我在网页onload时调用了一下这个函数后,再执行这个方法时GetIDsOfNames就返回成功了。好像需要先调用一下,才能找到。但是找到后,invoke那里却异常了。很头疼,不知道什么原因,迫切需要大家的帮助,谢谢。
|
|