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);
  • 相关阅读:
    费曼学习法
    Ubuntu修改系统默认编码
    如何在Ubuntu 18.04上安装和使用PostgreSQL
    Bash简介 & Bash是如何处理命令的
    ubuntu环境变量的三种设置方法
    psql 工具详细使用介绍
    使用ubuntu server18.04 搭建odoo12运行环境
    Ubuntu修改时区和更新时间
    Ubuntu18.04修改apt-get源
    对表内数据间隔特定的长度求和
  • 原文地址:https://www.cnblogs.com/zdxster/p/1945867.html
Copyright © 2011-2022 走看看