извикване на 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;
            }
        }

С функцията Започнете да извиквате много дълъг метод, който от своя страна предизвиква събития веднъж на всеки няколко минути и изпраща информация обратно към javascript.

Изглежда не мога да разбера защо не работи. какво липсва Съжалявам, ако въпросът не е ясен, грешката, която получавам, също не е ясна, така че просто попитайте и аз ще прецизирам въпроса.


person vondip    schedule 07.08.2009    source източник


Отговори (1)


Не виждам никакво декларирано събитие във вашия код. Нещо трябва да бъде

публичен делегат void EvenHanderDelegate(низ redirectUrl);

публично събитие EnvenHanderDelegate OnClose;

person dcool    schedule 11.03.2010