Exemple #1
0
        public virtual void AttachEventHandlerToDocument(THtmlDocument htmlDocument, string eventName,
                                                         object firstArgument, Func <bool> customEventDelegate, int functionHash,
                                                         Func <CustomWebBrowserControlEventHandler> getCustomEventHandler,
                                                         Action <CustomWebBrowserControlEventHandler> setCustomEventHandler)
        {
            if (!Enabled)
            {
                return;
            }
            var document = htmlDocument;

            if (document != null)
            {
                var formattableString = $"{DocumentEventPrefix}.{eventName}";
                var customWebBrowserControlEventHandler = getCustomEventHandler();
                if (customWebBrowserControlEventHandler == null)
                {
                    var customEventDelegates = new List <Tuple <string, Delegate, int> >();
                    setCustomEventHandler(new CustomWebBrowserControlEventHandler(customEventDelegates));
                    customWebBrowserControlEventHandler = getCustomEventHandler();
                }
                Delegate @delegate;
                var      eventInfo = EventHandlerAttacher.GetEventInfo(document, eventName);
                if (eventInfo != null)
                {
                    var eventInfoEventHandlerType = eventInfo.EventHandlerType;
                    if (!customWebBrowserControlEventHandler.EventHandlerIsAttached(formattableString, functionHash,
                                                                                    eventInfoEventHandlerType, firstArgument, customEventDelegate, out @delegate))
                    {
                        eventInfo.AddEventHandler(document, @delegate);
                        customWebBrowserControlEventHandler.TrackHandler(formattableString, @delegate, functionHash);
                    }
                }
            }
        }
Exemple #2
0
        public virtual void RemoveEventHandlerToControl(THtmlDocument htmlDocument, string controlId,
                                                        string eventName, int functionHash,
                                                        Func <CustomWebBrowserControlEventHandler> getCustomEventHandler)
        {
            if (!Enabled)
            {
                return;
            }
            var customWebBrowserControlEventHandler = getCustomEventHandler();

            if (customWebBrowserControlEventHandler == null)
            {
                return;
            }
            var element = GetElementById(htmlDocument, controlId);

            if (element != null)
            {
                var eventInfo = EventHandlerAttacher.GetEventInfo(element, eventName);
                if (eventInfo != null)
                {
                    var formattableString = $"{controlId}.{eventName}";
                    var @delegate         = customWebBrowserControlEventHandler
                                            .GetDelegate(formattableString, eventInfo.EventHandlerType, null, null, functionHash);
                    eventInfo.RemoveEventHandler(element, @delegate);
                    customWebBrowserControlEventHandler.UntrackHandler(formattableString, @delegate, functionHash);
                }
            }
        }
Exemple #3
0
        public virtual void AttachEventHandlerToControl(THtmlDocument htmlDocument, string controlId,
                                                        string eventName,
                                                        object firstArgument, Func <bool> customEventDelegate, int functionHash,
                                                        Func <CustomWebBrowserControlEventHandler> getCustomEventHandler,
                                                        Action <CustomWebBrowserControlEventHandler> setCustomEventHandler, bool removeHandlers = false)
        {
            if (!Enabled)
            {
                return;
            }
            DetachEventHandlersFromControl(htmlDocument, controlId, removeHandlers, eventName);

            if (htmlDocument != null)
            {
                var element           = GetElementById(htmlDocument, controlId);
                var formattableString = $"{controlId}.{eventName}";
                var customWebBrowserControlEventHandler = getCustomEventHandler();
                if (customWebBrowserControlEventHandler == null)
                {
                    var customEventDelegates = new List <Tuple <string, Delegate, int> >();
                    setCustomEventHandler(new CustomWebBrowserControlEventHandler(customEventDelegates));
                    customWebBrowserControlEventHandler = getCustomEventHandler();
                }
                if (element != null)
                {
                    Delegate @delegate;
                    var      eventInfo = EventHandlerAttacher.GetEventInfo(element, eventName);
                    if (eventInfo != null)
                    {
                        var eventInfoEventHandlerType = eventInfo.EventHandlerType;
                        if (!customWebBrowserControlEventHandler.EventHandlerIsAttached(formattableString, functionHash,
                                                                                        eventInfoEventHandlerType, firstArgument, customEventDelegate, out @delegate))
                        {
                            eventInfo.AddEventHandler(element, @delegate);
                            customWebBrowserControlEventHandler.TrackHandler(formattableString, @delegate,
                                                                             functionHash);
                        }
                    }
                }
            }
        }
Exemple #4
0
        public virtual void RemoveEventHandlerToDocument(THtmlDocument htmlDocument, string eventName,
                                                         int functionHash, Func <CustomWebBrowserControlEventHandler> getCustomEventHandler)
        {
            if (!Enabled)
            {
                return;
            }
            var customWebBrowserControlEventHandler = getCustomEventHandler();

            if (customWebBrowserControlEventHandler == null)
            {
                return;
            }

            var evn = htmlDocument;

            if (evn != null)
            {
                var eventInfo = EventHandlerAttacher.GetEventInfo(evn, eventName);
                if (eventInfo != null)
                {
                    var formattableString = $"{DocumentEventPrefix}.{eventName}";
                    var @delegate         = customWebBrowserControlEventHandler
                                            .GetDelegate(formattableString, eventInfo.EventHandlerType, null, null, functionHash);
                    var dictionary = customWebBrowserControlEventHandler.Delegates;
                    if (@delegate != null && dictionary.ContainsKey(formattableString, functionHash) &&
                        dictionary.Items(formattableString, @delegate, functionHash).Any())
                    {
                        try
                        {
                            eventInfo.RemoveEventHandler(evn, @delegate);
                        }
                        catch (Exception e)
                        {
                            Debug.Write(e);
                        }
                    }
                    customWebBrowserControlEventHandler.UntrackHandler(formattableString, @delegate, functionHash);
                }
            }
        }