国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

VC調(diào)用javascript的幾種方法(推薦)

2024-05-06 16:31:43
字體:
供稿:網(wǎng)友

第一種:通過execScript調(diào)用。這種方法,雖然操作方便,但不能獲取返回值。

m_spHtmlDoc->get_parentWindow(&m_pHtmlWindow);VARIANT ret;ret.vt = VT_EMPTY;BSTR bstr = sScript.AllocSysString();bRet = m_pHtmlWindow->execScript(bstr, L"javascript", &ret);::SysFreeString(bstr);sRet = CString(ret);

第二種:先用GetIDsOfNames找到這個(gè)腳本函數(shù)名稱,然后再調(diào)用。這種方法可以返回結(jié)果,有返回值。但是無法調(diào)用js的系統(tǒng)函數(shù),如eval。

BOOL CDhtmlDlgWindow::CallJScript(const CString strFunc, const CStringArray& paramArray, CComVariant* pVarResult){  CComPtr spScript;  if (NULL==m_spHtmlDoc)  {    return FALSE;  }  HRESULT hr;  hr = m_spHtmlDoc->get_Script(&spScript);  if(!SUCCEEDED(hr))  {    return FALSE;  }  CComBSTR bstrMember(strFunc);  DISPID dispid = NULL;  hr = spScript->GetIDsOfNames(IID_NULL,&bstrMember,1,                      LOCALE_SYSTEM_DEFAULT,&dispid);  if(FAILED(hr))  {    return FALSE;  }  const int arraySize = paramArray.GetSize();  DISPPARAMS dispparams;  memset(&dispparams, 0, sizeof dispparams);  dispparams.cArgs = arraySize;  dispparams.rgvarg = new VARIANT[dispparams.cArgs];    for( int i = 0; i < arraySize; i++)  {    CComBSTR bstr = paramArray.GetAt(arraySize - 1 - i); // back reading    bstr.CopyTo(&dispparams.rgvarg[i].bstrVal);    dispparams.rgvarg[i].vt = VT_BSTR;  }  dispparams.cNamedArgs = 0;  EXCEPINFO excepInfo;  memset(&excepInfo, 0, sizeof excepInfo);    CComVariant vaResult;  UINT nArgErr = (UINT)-1; // initialize to invalid arg    hr = spScript->Invoke(dispid,IID_NULL,0,              DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);  delete [] dispparams.rgvarg;  if(FAILED(hr))  {    return FALSE;  }    *pVarResult = vaResult;  return TRUE;}

實(shí)際使用時(shí),可能是先訪問(Navigate)了一個(gè)頁面。然后,在VC里面對這個(gè)頁面進(jìn)行一些js調(diào)用,并取回結(jié)果。有可能這個(gè)js調(diào)用的函數(shù)是這個(gè)頁面 里面沒有的。一般可以用eval(一些js語句)這樣的形式來調(diào)用頁面里面沒有的函數(shù),但是,現(xiàn)在上面兩種方法都不支持eval。

第三種:通過IScriptControl獲取當(dāng)前文檔上下文,然后調(diào)用IScriptControl::raw_Eval運(yùn)算。(只能用raw_Eval,用Eval方法會(huì)提示沒有權(quán)限。)

首先定義一個(gè):IScriptControlPtr,然后在OnDocumentComplete里面調(diào)用一下 m_spHtmlDoc->get_parentWindow(&m_pHtmlWindow);

IScriptControlPtr->AddObject("window", m_pHtmlWindow, VARIANT_TRUE);

第三種需要import "msscript.ocx"

以上這篇VC調(diào)用javascript的幾種方法(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持VeVb武林網(wǎng)。

 


注:相關(guān)教程知識(shí)閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黎平县| 洛阳市| 金坛市| 吐鲁番市| 宁南县| 吉水县| 宾阳县| 华亭县| 喀什市| 仲巴县| 庆城县| 平邑县| 堆龙德庆县| 叶城县| 城步| 镇安县| 灵宝市| 鄯善县| 孝昌县| 钦州市| 万宁市| 南丹县| 开平市| 汝城县| 广水市| 阳新县| 渝北区| 当雄县| 中山市| 邹平县| 山阳县| 迁安市| 平江县| 柞水县| 长治县| 奉化市| 平安县| 怀柔区| 嘉荫县| 西昌市| 江安县|