不关心返回值
IHTMLDocument2* pDocument;
IHTMLWindow2* pWindow;
//获得 html 的 Document 节点
HRESULT hr = GetDHtmlDocument(&pDocument);
//获得 Document 的窗口节点
pDocument->get_parentWindow(&pWindow);
VARIANT ret;
ret.vt = VT_EMPTY;
pWindow->execScript(AllocSysString("jsfunc()"),L"JavaScript",&ret);
//清理工作,释放 Document 和 window节点
pDocument->Release();
pWindow->Release();
需要返回值
IHTMLDocument2* pDocument;
IHTMLWindow2* pWindow;
DISPPARAMS dispparams;//用于给 JS 传递参数对象
DISPID dispid;
EXCEPINFO excepInfo;//获取JS中异常的对象
CComVariant vaResult;//JS返回的结果值对象
//获得 html 的 Document 节点及 Document 对应的窗口节点
pDocument = (IHTMLDocument2*)m_web.get_Document();
pDocument->get_parentWindow(&pWindow);
//初始化JS所用的参数对象,JS中异常的对象
memset(&dispparams, 0, sizeof dispparams);
memset(&excepInfo, 0, sizeof excepInfo);
//设置参数个数,并开辟参数空间
dispparams.cArgs=2;
dispparams.rgvarg = new VARIANT[dispparams.cArgs];
//设置每个参数的类型
dispparams.rgvarg[0].vt = VT_BSTR;
dispparams.rgvarg[1].vt = VT_BSTR;
//为参数赋值
CComBSTR fromMFC1=_T("one");
CComBSTR fromMFC2=_T("two");
fromMFC2.CopyTo(&dispparams.rgvarg[1].bstrVal);
fromMFC1.CopyTo(&dispparams.rgvarg[0].bstrVal);
UINT nArgErr = (UINT)-1;
CComBSTR szMember = _T("jsfunc");
pWindow->GetIDsOfNames(IID_NULL, &szMember,1,LOCALE_SYSTEM_DEFAULT,&dispid);
pWindow->Invoke(dispid, IID_NULL, 0, DISPATCH_METHOD, &dispparams, &vaResult, &excepInfo,&nArgErr);
//显示 JS 返回的结果
CString str(vaResult.bstrVal);
this->MessageBox(str);
//清理工作,释放 Document 和 window 节点
pDocument->Release();
pWindow->Release();