我希望VC在网站上执行JavaScript功能。
我的c ++代码可以成功执行标准的JS函数。 (例如" alert()")
但目标JavaScript功能由网站,网站html代码分隔:
"<script src="//xxx/yyy/zzz.js"></script>"
我的c ++代码似乎无法在&#34; zzz.js&#34;中找到功能。 by&#34; GetIDsOfNames()&#34;
有没有办法在&#34; zzz.js&#34;中获取/执行功能?
感谢。
下面是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;
}