zoukankan      html  css  js  c++  java
  • 一步一步实现ActiveX与js双向调用(二)

    4.      实现从ActiveX调用网页中的javascript.

    设计思路:从上述项目中产生的calc.html中创建一个js函数来调用控件的CallWebJs方法,而CallWebJs方法又调用页面中的js方法printMsg();

    具体操作如下:同3中的做法,再为控件添加一个方法命名为CallWebJs,


    在calc.cpp中找到该方法,并实现如下:

    STDMETHODIMP Ccalc::CallWebJs(VARIANT scriptCallback)

    {

        // TODO: Add your implementation code here

         CComPtr<IDispatch> spCallback;

         if (scriptCallback.vt == VT_DISPATCH)

             spCallback = scriptCallback.pdispVal;

                 CComVariant avarParams[1];

                 avarParams[0] = "hhheeee"; //指定回调函数的参数

         DISPPARAMS params = { avarParams, NULL, 1, 0 };

          if(spCallback)

              spCallback->Invoke(0, 

                    IID_NULL, 

                    LOCALE_USER_DEFAULT, 

                    DISPATCH_METHOD, 

                    &params, NULL, NULL, NULL);

        return S_OK;

    }

    在calc.html中添加调用按钮,html文件修改如下:

    <HTML>

    <HEAD>

    <TITLE>ATL 8.0 test page for object calc</TITLE>

    </HEAD>

    <BODY>

    <OBJECTID="calc"CLASSID="CLSID:4A524B99-8CAF-44E9-B788-70536908F048"></OBJECT>

    <inputtype="button"value="Add"onclick="add();"/>

    <inputtype="button"value="CallWebJs"onclick="test()"/>

    <scripttype="text/javascript">

        function add() {

            var calc = document.getElementById('calc');

            var result = calc.Add(2, 3);

            alert(result);

        }

        function test() {

             var calc = document.getElementById('Calc');

            var result = calc.CallWebJs(printMsg);

        }

        function printMsg(msg) {

            alert(msg);

        }

    </script>

    </BODY>

    </HTML>

    单击页面中的CallWebJs按钮,看到效果,实现通过ActiveX回调Js.

    注:

    楼主是个新人哦,只是把自己遇到的问题记录了下来,请批判性的阅读,若是有什么错误还请指出哦:-),文章之前的回调函数参数在js中指定,调用后会造成scriptCallback.vt的类型不正确,从而导致Invoke无法被触发,现将参数在回调函数中指定。另,不太推荐这种回调方法,使用这种方法,不是很灵活,尤其是在参数的指定方面,最好采用事件触发的方法,在ActiveX中创建事件和事件函数,由js中绑定的方法,后续文章详细介绍,也可以网上搜搜哦。。

  • 相关阅读:
    华为鲲鹏服务器测试
    gcc反汇编测试
    信息安全系统设计与实现:第五章学习笔记
    C语言实现ls之myls改进
    C语言编程实现mystat
    基于openEuler的OpenSSL编译安装和编程实践
    团队作业(三):确定分工
    centos的网络配置及克隆操作要点
    Flink特点分析
    机器学习之线性回归模型
  • 原文地址:https://www.cnblogs.com/lidabo/p/2751567.html
Copyright © 2011-2022 走看看