C# Winforms WebBrowser如何在默认浏览器中打开链接

3

我知道这个话题在这里已经被讨论了几次,但WebBrowser控件中点击链接的默认行为对我的应用程序不起作用。

所以虽然它可以像在IE中一样打开点击的链接:

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

    e.Cancel = true;
}

我正在使用下拉列表来更新WebBrowser正在显示的HTML文件,代码如下:

private void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
   webBrowser1.Url = myURI;  
}

现在我遇到的问题是,使用上述的_Navigating方法后,webBrowser不会加载任何后续更改的URL(感谢e.cancel),因此它只显示它加载的第一个html文件。
如果我删除_Navigating方法,它就可以正常更新,但链接会在同一个webBrowser控件中打开,这不是我想要的。
如何让它两种方式都能正常工作?

那么,与其让链接在同一个Web浏览器控件中打开,你想要什么?是在IE中打开更新后的URL吗? - Ryanas
你到底想要什么? - Syed Farjad Zia Zaidi
我想要能够将不同的HTML文件加载到WebBrowser中,并在IE(默认浏览器)中打开新链接。目前只有其中一种选项有效,而不是两者都有效。 - sd_dracula
2个回答

8
我希望这能对你有所帮助。
如果你想在浏览器中打开一个链接,你可以加入下面这段简单的代码:
Process.Start("http://google.com");

记住,这方面有很多信息。你可以在Stack Overflow中查看这篇文章:如何在C#中使用默认浏览器打开链接


如果您想在另一个浏览器中打开您的链接,您可以使用以下代码:

System.Diagnostics.Process.Start("firefox.exe", "http://www.google.com");

请不要忘记查看这篇名为:如何打开备选的浏览器(Mozilla或Firefox)并显示指定的URL?的文章。
最后,我可以向您推荐这篇 Stack Overflow 文章:.NET C#: WebBrowser控件Navigate()未加载目标URL 希望这些信息能对您有所帮助。

2
这是一篇旧帖子,但我相信我能理解原帖作者想要做的事情。他们希望在用户从下拉列表中选择页面时,在WebBrowser控件中加载该页面,但加载的页面中的任何链接都应在用户的Web浏览器中打开。如果确实是这种情况,原帖作者需要一个标志来确定行为。
原帖作者只需要一个类似于linksOpenInSystemBrowser的标志即可。
using System;
using System.Windows.Forms;

namespace Browser_Test
{
    public partial class myForm : Form
    {
        private bool linksOpenInSystemBrowser = false;

        public myForm()
        {
            InitializeComponent();
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            linksOpenInSystemBrowser = false;
            webBrowser1.Navigate(comboBox1.SelectedItem.ToString());
        }

        private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            if(!linksOpenInSystemBrowser)
            {
                linksOpenInSystemBrowser = true;
                return;
            }

            System.Diagnostics.Process.Start(e.Url.ToString());

            e.Cancel = true;
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接