因为没有人对其中的链接做出正确的回答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 标签。你可以捕捉任何你想要的标签。然后我们将点击事件附加到该元素上。
接下来,我们使用此代码创建事件本身。
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 link测试正则表达式。确保使用括号进行分组。我还建议使用问号不要贪婪匹配。然后我们匹配该模式并从匹配组中获取 url。之后,只需使用该 url 启动进程即可。这将打开默认浏览器,或者如果您的默认浏览器已经打开,则添加一个新选项卡。
我们需要做的最后一件事是取消链接的默认逻辑。我们使用以下代码在 NewWindow 事件中执行此操作。
private void webBrowserControl_NewWindow(object sender, CancelEventArgs e)
{
e.Cancel = true;
}