如何在外部浏览器中打开webBrowser控件中的链接?

我的Windows窗体应用程序中有一个textBox和一个webBrowser控件。 每当用户在textBox中输入HTML代码时,webBrowser控件都会显示其编译的表单。 代码:

private void textBox2_TextChanged(object sender, EventArgs e) { webBrowser1.DocumentText = textBox2.Text; } 

但每当我单击webBrowser控件中的链接时,它都会在同一个webBrowser控件中打开它。 我想要的是它应该在系统的默认Web浏览器中打开。 那么处理链接点击的webBrowser控件是否有任何事件?

最简单的方法是拦截导航事件。

 public void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { //cancel the current event e.Cancel = true; //this opens the URL in the user's default browser Process.Start(e.Url.ToString()); } 

我想在这个答案中添加更多内容,

每次更改webBrowser的内容时,都会执行Coz webBrowser1_Navigating方法。

在您的情况下,每当您将值设置为DocumentText时,都会调用此方法,并且当没有url且其默认值为about:blank时 。 所以我们也应该检查这个,否则它不会加载任何内容。

  private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { if (!(e.Url.ToString().Equals("about:blank", StringComparison.InvariantCultureIgnoreCase))) { System.Diagnostics.Process.Start(e.Url.ToString()); e.Cancel = true; } } 

Process.Start将在默认浏览器中打开URL,然后您只需告诉WebBrowser控件取消导航。

 private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { Process.Start(e.Url.ToString()); e.Cancel = true; } 

我刚刚创建了一个示例应用程序来测试它 – 它有效。

这里的代码应该有效:

 private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { System.Diagnostics.Process.Start(e.Url.ToString()); e.Cancel = true; } 

我试过这个以确保它有效并且确实有效!

希望这可以帮助!!

也许您可以尝试在Navigating事件中使用Process.Start()

因为没有人对其中的target="_blank"链接做出了正确的回答。 我会尝试这样做。

首先,为什么这不起作用? 因为当用户单击Web浏览器控件中的链接时,它不会触发导航事件,而是触发新窗口事件。 在新窗口事件中,您无权访问被单击以中断新窗口并打开默认窗口的URL或元素。 这是你如何做到的。

首先,在您的文档已完成事件中添加以下代码。

  private void webBrowserControl_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { string tagUpper = ""; foreach (HtmlElement tag in (sender as WebBrowser).Document.All) { tagUpper = tag.TagName.ToUpper(); if((tagUpper == "AREA") || (tagUpper == "A")) { tag.MouseUp += new HtmlElementEventHandler(this.link_MouseUp); } } } 

这样做是通过所有的html元素标签,并找到你在if语句中定义的所有标签。 对于我的情况,我也需要AREA标签。 你可以捕捉到你想要的任何标签。 然后,我们将click事件附加到该元素上。

接下来,我们使用此代码创建事件本身。

  void link_MouseUp(object sender, HtmlElementEventArgs e) { Regex pattern = new Regex("href=\\\"(.+?)\\\""); Match match = pattern.Match((sender as HtmlElement).OuterHtml); string link = match.Groups[1].Value; Process.Start(link); } 

此代码建立了一个正则表达式模式, 您很可能需要根据自己的需要更改此模式 。 我建议在这里添加一个断点,看看你的正则表达式需要看起来如何。 您可以在regex链接上测试正则表达式 。 确保使用括号进行分组。 我还建议使用问号贪婪地匹配。 然后我们匹配该模式并从匹配组中获取URL。 在那之后,它只是一个用该URL启动进程的情况。 这将打开默认浏览器,或者如果您的默认浏览器已打开,则添加新选项卡。

我们需要做的最后一件事是取消链接的默认逻辑。 我们使用以下代码在NewWindow事件中执行此操作。

  private void webBrowserControl_NewWindow(object sender, CancelEventArgs e) { e.Cancel = true; }