我的Windows窗体应用程序中有一个textBox和一个webBrowser控件。每当用户在textBox中输入HTML代码时,webBrowser控件都会显示其编译的表单。代码:
private void textBox2_TextChanged(object sender, EventArgs e)
{
webBrowser1.DocumentText = textBox2.Text;
}
但是每当我点击webBrowser控件中的链接时,它都会在同一个webBrowser控件中打开它。我想要的是它应该在系统的默认Web浏览器中打开。那么这个处理链接点击的webBrowser控件是否有任何事件?
答案 0 :(得分:24)
最简单的方法是截取Navigating事件。
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());
}
答案 1 :(得分:8)
我想在这个答案中添加更多内容,
每次更改webBrowser的内容时,都会执行Coz webBrowser1_Navigating 方法。
如果您将值设置为 DocumentText ,则会调用此方法,并且当无网址且其默认值为时为:空白。 所以我们也应该检查一下,否则它不会加载任何内容。
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;
}
}
答案 2 :(得分:4)
Process.Start
会在默认浏览器中打开该网址,然后您只需告诉WebBrowser
控件取消导航。
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
Process.Start(e.Url.ToString());
e.Cancel = true;
}
我刚刚创建了一个示例应用来测试它 - 它工作正常。
答案 3 :(得分:4)
这里的代码应该有效:
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
System.Diagnostics.Process.Start(e.Url.ToString());
e.Cancel = true;
}
我试过这个以确保它有效并且确实有效!
希望这会有所帮助!!
答案 4 :(得分:3)
也许您可以尝试在导航事件中使用Process.Start()
?
答案 5 :(得分:2)
因为没有人对其中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 link测试正则表达式。确保使用括号进行分组。我还建议使用问号贪婪地匹配。然后我们匹配该模式并从匹配组中获取URL。在那之后,它只是一个用该URL启动进程的情况。这将打开默认浏览器,或者如果您的默认浏览器已打开,则添加新选项卡。
我们需要做的最后一件事是取消链接的默认逻辑。我们使用以下代码在NewWindow事件中执行此操作。
private void webBrowserControl_NewWindow(object sender, CancelEventArgs e)
{
e.Cancel = true;
}