【问题标题】:How to force Web Browser control to always open web page in the same window?如何强制 Web 浏览器控件始终在同一窗口中打开网页?
【发布时间】:2009-03-31 16:02:44
【问题描述】:

我需要在我的应用程序中使用 Web 浏览器,因为它可以防止员工重复执行任务,但是在单击锚点后在 IE 中打开一个新窗口的 javascript 存在问题。如何告诉 Web 浏览器控件在我希望打开的位置“打开新窗口”?例如在其他网络浏览器控件中?

【问题讨论】:

  • 我很想听听这个问题的答案。但是,组件不是必须通知您的应用程序要打开一个新窗口吗?然后,您必须使用新的 WebBrowser 组件打开新窗口。也许有活动?
  • 不幸的是,锚是“javascript:void(0)”链接..我不知道如何解决这个

标签: .net winforms webbrowser-control


【解决方案1】:

我找到了一个可行的简单解决方案。

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

【讨论】:

  • 谢谢,这段代码运行良好(VS 2015,C#)。现在没有新窗口。易于使用,sn-p 很小。
  • 非常简单和不错的解决方案,也适用于我。谢谢!! ;)
【解决方案2】:

查看: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. 它使用的一个例子是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;
        }
      }
    }
    

在第一个链接查看更多,这是主窗口的源代码,那里有很多不同的操作!

【讨论】:

  • 以及如何将其插入到我的应用程序中?
  • 酷,A 中有 URL,但我需要解析它,因为它是 onclick 的一部分!伟大的。谢谢你
【解决方案3】:

为什么这么复杂的答案伙计们? 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 组件。

【讨论】:

    【解决方案4】:

    案例MouseBUttons.Left有错误:

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

    【讨论】:

      猜你喜欢
      • 2017-04-02
      • 1970-01-01
      • 2022-06-28
      • 2019-01-17
      • 2012-08-17
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多