VC调用IE中的Javascript函数
我想用VC在网站上执行JavaScript函数 < >我的C++代码可以成功执行标准JS函数。(例如“警报()”) 但目标JavaScript函数由网站分隔,网站html代码:VC调用IE中的Javascript函数,javascript,c++,internet-explorer,Javascript,C++,Internet Explorer,我想用VC在网站上执行JavaScript函数 < >我的C++代码可以成功执行标准JS函数。(例如“警报()”) 但目标JavaScript函数由网站分隔,网站html代码: "<script src="//xxx/yyy/zzz.js"></script>" “” 我的C++代码在“ZigZ.FixNeSee()”中找不到“ZZ.js”函数。 有没有办法获取/执行“zzz.js”中的函数 谢谢 下面是C++代码: bool execJavascript(const
"<script src="//xxx/yyy/zzz.js"></script>"
“”
<>我的C++代码在“ZigZ.FixNeSee()”中找不到“ZZ.js”函数。
有没有办法获取/执行“zzz.js”中的函数
谢谢
下面是C++代码:
bool execJavascript(const CComPtr<IHTMLDocument2> spDocument2, wstring wsFuncName, const CArray <VARIANT, VARIANT&> &pArrVARIANT_Params)
{
HRESULT hr = S_FALSE;
CComPtr<IDispatch> pScript;
hr = spDocument2-> get_Script(&pScript);
if (FAILED(hr))
return false;
//(2)Get Javascript Function
CComBSTR pCComBSTR(wsFuncName.c_str());
DISPID pDISPID;
hr = pScript->GetIDsOfNames(IID_NULL, &pCComBSTR, 1, LOCALE_SYSTEM_DEFAULT, &pDISPID);
if (FAILED(hr))
return false;
//(3)Add Parameters
DISPPARAMS pDISPPARAMS;
memset(&pDISPPARAMS, 0, sizeof(pDISPPARAMS));
int intArgsCount_In = pArrVARIANT_Params.GetSize();
VARIANT* vParams = new VARIANT[intArgsCount_In];
for (int i = 0 ; i < intArgsCount_In ; i++)
{
vParams[i] = pArrVARIANT_Params.GetAt(i);
}
//Params Count
pDISPPARAMS.cArgs = intArgsCount_In;
//Params Array
pDISPPARAMS.rgvarg = vParams;
//Name Args Count
pDISPPARAMS.cNamedArgs = 0;
//(4)Invoke Javascript Method
EXCEPINFO pEXCEPINFO;
memset(&pEXCEPINFO, 0, sizeof(pEXCEPINFO));
CComVariant pCComVariant;
//Initialize to invalid arg
UINT nintArgErr = (UINT)-1;
hr = pScript->Invoke(pDISPID, IID_NULL, 0, DISPATCH_METHOD, &pDISPPARAMS, &pCComVariant, &pEXCEPINFO, &nintArgErr);
delete[] pDISPPARAMS.rgvarg;
pScript.Release();
if(FAILED(hr))
return false;
return true;
}
bool execJavascript(const CComPtr spDocument2、wstring wsFuncName、const CArray和pArrVARIANT_参数)
{
HRESULT hr=S_FALSE;
CComPtr pScript;
hr=spDocument2->get_脚本(&pScript);
如果(失败(小时))
返回false;
//(2) 获取Javascript函数
CComBSTR pCComBSTR(wsFuncName.c_str());
DISPID-pDISPID;
hr=pScript->GetIDsOfNames(IID_NULL,&pCComBSTR,1,LOCALE_SYSTEM_DEFAULT,&pDISPID);
如果(失败(小时))
返回false;
//(3) 添加参数
DISPPARAMS-pDISPPARAMS;
memset(&pDISPPARAMS,0,sizeof(pDISPPARAMS));
int intargscont_In=parrviant_Params.GetSize();
VARIANT*vParams=新变量[intargscont_In];
对于(int i=0;iInvoke(pDISPID、IID_NULL、0、DISPATCH_方法、pDISPPARAMS、pCComVariant、pEXCEPINFO和nintArgErr);
删除[]pDISPPARAMS.rgvarg;
pScript.Release();
如果(失败(小时))
返回false;
返回true;
}
代码似乎没有问题,可能是函数名中有错误?或者您需要一个变量来调用函数?我检查了,代码在“GetIDsOfNames()”处失败。函数名正确,不需要任何参数。函数是用“zzz.js”编写的。谢谢。可能会显示您试图调用的javascript函数?函数doAjaxLogin(){$.post(“/ic/api/signinx.jsp)”,$(“#loginForm”).serialize(),函数(data){if(data.status==“true”){if(data.url){location.href=data.url;return;}performLogin()}else{if(data.url)location.href=data.url;},“json”);}我找到了根本原因。IE9或更新版本不支持“GetIDsOfNames()”。请参考,谢谢。