从activex调用javascript函数

时间:2009-08-07 19:36:33

标签: javascript activex

我正在构建一个小型的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;
            }
        }

使用函数Start调用一个非常冗长的方法,每隔几分钟就会引发一次事件并将信息发送回javascript。

我似乎无法理解为什么它不起作用。少了什么东西?如果问题不明确,我很抱歉,我得到的错误也不清楚,所以请问我,我会改进这个问题。

1 个答案:

答案 0 :(得分:1)

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

public delegate void EvenHanderDelegate(string redirectUrl);

公共事件EnvenHanderDelegate OnClose;