VC++开发的ActiveX如何通过JavaScript脚本和EOS应用交互
由于一些特殊的业务场景,用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);
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号