如何强制Web浏览器控件始终在同一窗口中打开网页?

时间:2009-03-31 16:02:45

标签: .net winforms webbrowser-control

我需要在我的应用程序中使用Web浏览器,因为它会保留员工的重复性任务,但是在点击锚点后,javascript会在IE中打开一个新窗口。如何告诉Web浏览器控件“打开新窗口”我想要打开它?例如在其他Web浏览器控件中?

4 个答案:

答案 0 :(得分:15)

我找到了一个有效的简单解决方案。

private void WebBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e) {
    e.Cancel = true;
    WebBrowser1.Navigate(WebBrowser1.StatusText);
}

答案 1 :(得分:5)

查看:proof-of-concept of .NET System.Windows.Forms.WebBrowser module using源代码


我对这些控制的经验让我有了一个愿景,即这个问题可以在接下来的步骤中解决:

  1. 始终取消NewWindow活动

  2. 抓住all links点击

  3. 但并非所有链接都可以通过这种方式缓存,因此我决定在Document Loading Completion上手动解析所有代码<a>

  4. 一般来说,这种控制非常差,并且是故意由微软制作的。虽然Webrowser.Document.HtmlDocument和命名空间MSHTML

  5. 附近有强大的工具集
  6. 使用的示例是HtmlElement.DomElement

    foreach(HtmlElement tag in webBrowser.Document.All)        
    {
      switch (tag.TagName.ToUpper)
      {
        case "A":
        {
          tag.MouseUp += new HtmlElementEventHandler(link_MouseUp);
          break;
        }
      }
    }
    
    void link_MouseUp(object sender, HtmlElementEventArgs e)
    {
      HtmlElement link = (HtmlElement)sender;
      mshtml.HTMLAnchorElementClass a = (mshtml.HTMLAnchorElementClass)link.DomElement;
      switch (e.MouseButtonsPressed)
      {
        case MouseButtons.Left:
        {
          if ((a.target != null && a.target.ToLower() == "_blank") ||
              e.ShiftKeyPressed ||
              e.MouseButtonsPressed == MouseButtons.Middle)
          {
            // add new tab
          }
          else
          {
            // open in current tab
          }
          break;
        }
        case MouseButtons.Right:
        {
          // show context menu
          break;
        }
      }
    }
    
  7. 在第一个链接中查看更多信息,这是主窗口的源代码,那里有很多不同的操作!

答案 2 :(得分:0)

为什么这么复杂的回答伙计? Abatischev,我很想看到你的大脑,应该很有趣......

试试这个:

Private Sub WB1_NewWindow(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles WB1.NewWindow
    newUrl = WB1.Url.ToString

    e.Cancel = True
    WB1.Navigate(newUrl)
End Sub

现在,您可以将第二行更改为任何OWN表单中的WB2或任何其他WebBrowser组件。

答案 3 :(得分:-1)

案例MouseBUttons.Left中存在错误:

  

错误1控件不能从一个案例标签('案例)中删除   1048576:')到另一个C:\ Documents and Settings \ ever \ My   Documents \ Visual Studio   2005 \ Projects \ Desarrollo \ wApp_SurverMonkey \ wApp_SurverMonkey \ frmNetcare.cs 64 17 wApp_SurverMonkey