代码之家  ›  专栏  ›  技术社区  ›  vondip

从ActiveX调用javascript函数

  •  1
  • vondip  · 技术社区  · 16 年前

    我正在构建一个小的ActiveX控件。我知道ActiveX不能直接调用JavaScript函数,但需要处理事件。因此,我创建了一个事件,从codeproject的代码示例中复制。

    事件似乎只在某些情况下起作用:当调用一个立即引发事件的javascript函数时,它起作用。当我的javascript函数调用执行长时间操作的ActiveX方法并且只引发事件时,它不起作用,以下是我的意思示例:

    ActiveX事件:

    [Guid("68BD4E0D-D7BC-4cf6-BEB7-CAB950161E79")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ControlEvents
    {
        //Add a DispIdAttribute to any members in the source interface to specify the COM DispId.
        [DispId(0x60020001)]
        void OnClose(string redirectUrl); //This method will be visible from JS
    }
    

    有效的调用示例:

        [ComVisible(true)]
    
    
    public void Close()
        {
            if (OnClose != null)
            {
                OnClose("my test"); //Calling event that will be catched in JS
            }
            else
            {
                MessageBox.Show("No Event Attached"); //If no events are attached send message.
            }
        }
    

    失败的调用示例:

    [ComVisible(true)]
            public void Open()
            {
                try
                {
                    Start();
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
    

    函数开始调用一个非常长的方法,然后每隔几分钟引发一次事件,并将信息发送回javascript。

    我似乎不明白为什么它不起作用。缺少什么?很抱歉,如果问题不清楚,我得到的错误也不清楚,所以只要问,我会完善问题。

    1 回复  |  直到 11 年前
        1
  •  1
  •   dcool    15 年前

    我在您的代码中没有看到任何事件声明。应该是什么

    公共委托void evenhanderdelegate(字符串redirecturl);

    公共事件envenhanderelegate onclose;