您的位置:首页 > Web前端 > JavaScript

VC++开发的ActiveX如何通过JavaScript脚本和EOS应用交互

2013-10-30 23:44 776 查看
由于一些特殊的业务场景,用EOS开发的应用需要采用VC++开发的ActiveX控件,下面介绍如何采用在ActiveX控件中,用过JavaScript脚本实现和EOS应用的交互。

1.1 如何从ActiveX中访问HTML中的JS方法

1.1.1 在JS中设计一个方法

function testFunc(a,b){

alert("调用JavaScript中方法(连接字符串):"+( a+b));

}

1.1.2 为CDemoDialog增加新的方法

void CDemoDialog::CalJSFunction(const CString &funcName,DISPPARAMS &dispparams){

//这里描述了如何让ocx与ie进行交互

CDemoCtrl* pCtrl = (CDemoCtrl*)GetParent();

if(pCtrl)

{

CComPtr<IOleClientSite> pSite;

pSite = pCtrl->GetClientSite();

if(pSite)

{

CComPtr<IOleContainer> pContainer;

HRESULT hr = pSite->GetContainer(&pContainer);

if(FAILED(hr))

{

return;

}

CComQIPtr<IHTMLDocument2> pDoc(pContainer);

if(!pDoc)

{

return;

}

CComPtr<IDispatch> pScript;

pDoc->get_Script((IDispatch**) &pScript);

if(FAILED(hr))

{

return;

}

CComBSTR bstrMember(funcName); //传入JS的函数名

DISPID dispid;

hr = pScript->GetIDsOfNames(IID_NULL, &bstrMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);

if(FAILED(hr))

{

return;

}

EXCEPINFO excepInfo;

memset(&excepInfo, 0, sizeof(excepInfo));

CComVariant vaResult;

UINT nArgErr = (UINT)-1; // initialize to invalid arg

hr = pScript->Invoke(dispid, IID_NULL, 0, DISPATCH_METHOD, &dispparams, &vaResult, &excepInfo, &nArgErr);

}

}

}

1.1.3 为CDemoDialog的按钮增加事件

DISPPARAMS dispparams;

memset(&dispparams, 0, sizeof(dispparams));

dispparams.cArgs=2; // 设置参数个数

dispparams.rgvarg=new VARIANTARG[2]; // 初始化参数数组

dispparams.rgvarg[0].vt=VT_BSTR; // 第一个参数的类型

dispparams.rgvarg[0].bstrVal=::SysAllocString(L"One Dream"); //第一个参数的值

dispparams.rgvarg[1].vt=VT_BSTR; //第二个参数的类型

dispparams.rgvarg[1].bstrVal=::SysAllocString(L"One World "); //第二个参数的值

CalJSFunction("testFunc",dispparams); // testFunc是要调用JS的函数名

SysFreeString(dispparams.rgvarg[0].bstrVal);

SysFreeString(dispparams.rgvarg[1].bstrVal);

需要包含CWebPage。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐