zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    SQL舊面版與標准版不能互導數據
    今天總算可以繼續寫日記了
    MDAC2.7没有安装,控件不能运行
    希望5月份网络能开通
    SQLITE入门逐步讲解SQLITE命令行(一)
    C#使用SQLite数据库的代码示例
    红外遥控 Arduino 实例
    SQLite数据库是中小站点CMS的最佳选择
    防止 SQLite 数据库被下载的方法
    关于Linux下的Grep命令简介
  • 原文地址:https://www.cnblogs.com/zdxster/p/1945867.html
Copyright © 2011-2022 走看看