VC呼叫javascript的幾種方法(推)

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

第一種:通過execScript呼叫。這種方法,雖然操作方便,但不能獲取返回值。


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找到這個指令碼函式名稱,然後再呼叫。這種方法可以返回結果,有返回值。但是無法呼叫js的系統函式,如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;
}

實際使用時,可能是先訪問(Navigate)了一個頁面。然後,在VC裡面對這個頁面進行一些js呼叫,並取回結果。有可能這個js呼叫的函式是這個頁面 裡面沒有的。一般可以用eval(一些js語句)這樣的形式來呼叫頁面裡面沒有的函式,但是,現在上面兩種方法都不支援eval。

第三種:通過IScriptControl獲取當前文件上下文,然後呼叫IScriptControl::raw_Eval運算。(只能用raw_Eval,用Eval方法會提示沒有許可權。)

首先定義一個:IScriptControlPtr,然後在OnDocumentComplete裡面呼叫一下 m_spHtmlDoc->get_parentWindow(&m_pHtmlWindow);

IScriptControlPtr->AddObject(“window”, m_pHtmlWindow, VARIANT_TRUE);

第三種需要import “msscript.ocx”

以上這篇VC呼叫javascript的幾種方法(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援指令碼之家。

您可能感興趣的文章:

HTML頁面,測試JS對C函式的呼叫簡單例項Javascript呼叫函式方法的幾種方式介紹JavaScript函式的4種呼叫方法詳解用指令碼呼叫樣式的幾種方法JavaScript中5種呼叫函式的方法

相關文章

前端開發 最新文章