Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用sdocvw.dll在c#中侦听任何DOM事件_C#_Internet Explorer_Events_Dom - Fatal编程技术网

如何使用sdocvw.dll在c#中侦听任何DOM事件

如何使用sdocvw.dll在c#中侦听任何DOM事件,c#,internet-explorer,events,dom,C#,Internet Explorer,Events,Dom,我正在尝试连接到Internet Explorer并向任何DOM事件(包括自定义事件)添加侦听器。如何做到这一点? 我正在尝试此变体,但没有任何结果: //... using mshtml; using SHDocVw; using System.Windows.Browser; class Test { public Test(){ IWebBrowser2 browser = BrowserHelper.GetBrowserInstance(); va

我正在尝试连接到Internet Explorer并向任何DOM事件(包括自定义事件)添加侦听器。如何做到这一点? 我正在尝试此变体,但没有任何结果:

//...
using mshtml;
using SHDocVw;
using System.Windows.Browser;
class Test {
    public Test(){
        IWebBrowser2 browser = BrowserHelper.GetBrowserInstance();
        var a = browser.Document as HTMLDocument;

        mydelegate obj = this.somefunction;
        a.attachEvent("onclick", obj);
    }

    public delegate void mydelegate(object sender, HtmlEventArgs args);

    public void somefunction(object sender, HtmlEventArgs args)
    {
         MessageBox.Show("Clicked!");
    }
}     

BrowserHelper返回正确的浏览器实例。

这适用于我,无需直接使用SHDOCVW。我不知道从DOM获取自定义事件的解决方案。如果您知道要侦听的自定义事件列表,则可以很容易地完成

        private void webBrowser1_DocumentCompleted(
                          object sender, 
                          WebBrowserDocumentCompletedEventArgs e)
        {
            // obtain HtmlDocument
            HtmlDocument htmlDoc = webBrowser1.Document;

            // loop over ALL elements in HtmlDoc
            foreach(HtmlElement element in htmlDoc.All)
            {
                // for the HtmlElements type fetch its suported Events
                // from the typeinfo
                // we use a LinqQuery to filter in the future
                var listOfEvents = from domInt in element.GetType().GetEvents()
                                   // where domInt.Name.Contains("click")
                                   select domInt;
                // iterated over the EventMembers
                foreach (var htmlevent in listOfEvents) 
                {
                    // invoke .Net managed AddEventHandler 
                    htmlevent.AddEventHandler(
                        element, 
                        new HtmlElementEventHandler(GenericDomEvent));
                }
            }
        }

        // do usefull stuff with the even raised
        private void GenericDomEvent(object sender, HtmlElementEventArgs e)
        {
            Debug.WriteLine(e.EventType);
        }

这对我来说很有效,没有直接使用SHDOCVW。我不知道从DOM获取自定义事件的解决方案。如果您知道要侦听的自定义事件列表,则可以很容易地完成

        private void webBrowser1_DocumentCompleted(
                          object sender, 
                          WebBrowserDocumentCompletedEventArgs e)
        {
            // obtain HtmlDocument
            HtmlDocument htmlDoc = webBrowser1.Document;

            // loop over ALL elements in HtmlDoc
            foreach(HtmlElement element in htmlDoc.All)
            {
                // for the HtmlElements type fetch its suported Events
                // from the typeinfo
                // we use a LinqQuery to filter in the future
                var listOfEvents = from domInt in element.GetType().GetEvents()
                                   // where domInt.Name.Contains("click")
                                   select domInt;
                // iterated over the EventMembers
                foreach (var htmlevent in listOfEvents) 
                {
                    // invoke .Net managed AddEventHandler 
                    htmlevent.AddEventHandler(
                        element, 
                        new HtmlElementEventHandler(GenericDomEvent));
                }
            }
        }

        // do usefull stuff with the even raised
        private void GenericDomEvent(object sender, HtmlElementEventArgs e)
        {
            Debug.WriteLine(e.EventType);
        }

谢谢你的回答,不幸的是,我还不能投票——我是这里的新手。)但是,我可以使用webBrowser处理现有Internet Explorer的DOM事件(是的,我有自定义事件列表),还是必须在表单中的webBrowser控件中打开文档并强制用户在其中工作?感谢您的回答,不幸的是,我还不能投票-我是这里的新手。)但是,我可以使用webBrowser处理现有Internet Explorer的DOM事件(是的,我有自定义事件列表),还是必须在表单中的webBrowser控件中打开文档并强制用户在其中工作?