这是从MFC应用程序调用JavaScript函数的方法。
假设这是您HTML文件中的JavaScript函数。
JAVASCRIPT函数
可能有不同类型的JavaScript函数。
类型1:无参数,无返回值。
function myfunction()
{
Alert('Hey I am Here');
}
类型2:没有返回值的参数
function myfunction1(value)
{
Alert(value);
}
类型3:参数可以有返回值,也可以没有。
function myfunction2(value)
{
return value;
}
这个函数用于调用Javascript函数。
BOOL CMyDlg::CallClientScript(LPCTSTR pStrFuncName, CStringArray* pArrFuncArgs, CComVariant* pOutVarRes)
{
BOOL bRes = FALSE;
CComVariant vaResult;
CComPtr<IHTMLDocument2> pIDoc2;
if(SUCCEEDED(this->GetDHtmlDocument(&pIDoc2)))
{
CComPtr<IDispatch> spScript;
if(SUCCEEDED(pIDoc2->get_Script(&spScript)))
{
CComBSTR bstrMember(pStrFuncName);
DISPID dispid = NULL;
if(SUCCEEDED(spScript->GetIDsOfNames(IID_NULL, &bstrMember, 1, LOCALE_USER_DEFAULT, &dispid)))
{
const int arraySize = pArrFuncArgs ? pArrFuncArgs->GetSize() : 0;
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof dispparams);
dispparams.cArgs = arraySize;
dispparams.rgvarg = new VARIANT[dispparams.cArgs];
dispparams.cNamedArgs = 0;
for( int i = 0; i < arraySize; i++)
{
CComBSTR bstr = pArrFuncArgs->GetAt(arraySize - 1 - i);
bstr.CopyTo(&dispparams.rgvarg[i].bstrVal);
dispparams.rgvarg[i].vt = VT_BSTR;
}
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
UINT nArgErr = (UINT)-1;
if(SUCCEEDED(spScript->Invoke(dispid, IID_NULL, 0, DISPATCH_METHOD, &dispparams, &vaResult, &excepInfo, &nArgErr)))
{
bRes = TRUE;
}
delete [] dispparams.rgvarg;
}
}
}
if(pOutVarRes)
*pOutVarRes = vaResult;
return bRes;
}
如何使用?
点击任何按钮即可调用此函数,例如:
onbuttonclickOk()
{
CStringArray arrArgs;
CComVariant varRes;
CallClientScript(L"myfunction",&arrArgs,&varRes);
}
如何获取JavaScript函数的返回值?
如果您的JavaScript函数返回任何值,它将被存储在变量varRes
中。
您可以像这样获取返回值:
CString strTmp;
if(CallClientScript(L"myfunction3",&arrArgs,&varRes))
{
if(varRes.vt == VT_BSTR){
strTmp = varRes.bstrVal;
}
}
编辑:
使用编辑控件
假设您有一个像这样的编辑控件
<input type="text" id="MyEdit" />
在DoDataExchange中添加一行代码。
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDHtmlDialog::DoDataExchange(pDX);
DDX_DHtml_ElementInnerText(pDX, _T("MyEdit"), m_strMyEdit);
}
m_strMyEdit
是你可以在.h
文件中声明的CString
变量。
在OnInitDialog
函数中,你可以给它赋任何值来在编辑框中显示,例如:
m_strMyEdit = _T("Enter anything");
如果你想在程序中稍后更新编辑框的值,只需添加以下几行代码:
UpdateData();
m_strMyEdit =_T("Hello World");// give new value
UpdateData(FALSE);
如果您想访问编辑框的值,可以直接使用m_strMyEdit
变量。
我认为这会对您有所帮助..!!!