WebBrowser Control .NET - 与此控件交互的预期方式是什么?

时间:2011-07-27 13:03:38

标签: c# .net winforms webbrowser-control

我正在尝试掌握WebBrowser控件,以便在我正在构建的数据提取应用程序中使用。

此处的一个要求是能够记录用户操作并进行回放。虽然我取得了一些成功,但我对是否以正确的方式解决这个问题感到困惑。

网上似乎有以非常不同的方式使用控件的代码示例。更不用说有 WinForms 实现, WPF 实现和 Silverlight 实现。

有人可以确认:

  1. 到目前为止,我的调查结果是否正确,WPF版本的控件与WinForms版本的功能不同 - 并且在对某些事件做出反应方面有些限制?

  2. 为什么有人会在使用控件时选择使用基于mshtml的类,至少在WinForms中,在Windows窗体类中存在执行相同任务的等效方法?

  3. 实施例

    Winforms Click Event Handle

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
       foreach (HtmlElement ele in uc_webBrowser.Document.All)
       {
          HtmlElementEventHandler eventhandler = new HtmlElementEventHandler(documentClickHandler);
    
          if (ele.TagName.ToLower() == "a" || ele.TagName.ToLower() == "input" || ele.TagName.ToLower() == "select" || ele.TagName.ToLower() == "img")
          {
             ele.Click -= eventhandler;
             ele.Click += eventhandler;
          }
       }
    }
    

    点击使用mshtml类的事件句柄

    void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {
       // Add doc null check otherwise the event handlers are assigned multiple times
       // http://stackoverflow.com/questions/5400020/how-come-htmldocumentevent-onclick-fires-up-multiple-times
    
       if (doc == null)
       {
          var eventHdlr = new mshtml.HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler);
    
          doc = (mshtml.HTMLDocument)webBrowser1.Document.DomDocument;
          mshtml.HTMLDocumentEvents2_Event iEvent = (mshtml.HTMLDocumentEvents2_Event)doc;
          iEvent.onclick -= eventHdlr;
          iEvent.onclick += eventHdlr;
          //iEvent.oncellchange += new HTMLDocumentEvents2_oncellchangeEventHandler(iEvent_oncellchange);
          //iEvent.oncontrolselect += new HTMLDocumentEvents2_oncontrolselectEventHandler(iEvent_oncontrolselect);
          //iEvent.onselectionchange += new HTMLDocumentEvents2_onselectionchangeEventHandler(iEvent_onselectionchange);
       }
    }
    

2 个答案:

答案 0 :(得分:1)

多年前,我使用WinForms的WebBrowser实现了一个有点复杂的WYSIWYG编辑器,当时浏览器是IE 7(有那个或Firefox 1或2,我不记得了)。如果您继续在浏览器中加载页面,您将看到MSHTML PIA是痛苦可以使用。

IE 7的浏览器组件的行为并非100%确定(希望IE 9可能已经改变,但更糟糕的是,您可能不得不处理不同版本的Microsoft浏览器)。然而,精心设计的OO层首先会为您的生产力创造奇迹。

我将尝试回答您对使用网络浏览器的疑虑:

  1. 根据以下链接,在WPF的WebBrowser中,您将获得与JavaScript相同的功能。由于之前已经在浏览器中完成了宏,因此您肯定会有足够的事件来执行您想要的操作。

      

    What functional differences exist between WPF and WinForms WebBrowser control?

  2. 如果您觉得不需要WebBrowser控件,请尽可能从中运行。桌面GUI中的浏览器可以提供很多帮助,但需要付出代价。

  3. 但是,如果你想使用它,你可能想尝试不同的浏览器。例如,MonoDevelop的ASP.NET设计人员是在不久之前使用 Mozilla Composer (Gecko引擎)开发的,之前WebForms非常不受欢迎,有一个项目要从头开始使用 WebKit 引擎。

答案 1 :(得分:0)

我已经写过一些关于WebBrowser的文章了。你可以试试这个: http://www.dotnetfunda.com/articles/article840-working-with-webbrowser-in-wpf-.aspx

由于