【问题标题】:WebBrowser control not opens URLs in native browser window when IE11 is disabled/uninstalled禁用/卸载 IE11 时,WebBrowser 控件不会在本机浏览器窗口中打开 URL
【发布时间】:2021-09-19 18:23:54
【问题描述】:

我正在使用在 .NET Framework 2.0 中开发的 Windows 窗体应用程序。我无法升级框架,因为 2.0 是要求。该应用程序用于在 .NET 4.5.2 开发的 Web 应用程序的 WebBrowser 控件中托管 URL,并且工作正常。 Web 应用程序加载还包含超链接的 HTML 内容。现在我面临 IE11 不可用或被禁用/卸载的情况。当 Windows 窗体应用程序运行并通过网站加载 HTML 内容时,我尝试单击其中一个超链接,而不是在任何其他可用浏览器(Chrome、Edge)中打开链接,它什么也不做。你能给我一个解决方法来处理这种情况吗?我希望 URL 应该在任何其他可用的浏览器窗口中打开。

谢谢。

【问题讨论】:

  • 获取被点击链接的URI和Process.Start()打开默认浏览器。
  • 您也可以尝试将Navigate() 转为_self(参见Navigate(Uri, String, Byte[], String) 重载)

标签: .net winforms internet-explorer webbrowser-control


【解决方案1】:

点击链接可以先获取url的链接href,然后使用Process.Start()启动Edge/Chrome导航到链接。

示例代码如下,它启动 Edge (msedge.exe) 来打开链接:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var linkElements = webBrowser1.Document.GetElementsByTagName("a");
    foreach (HtmlElement link in linkElements)
    {
        link.Click += (s, args) =>
        {
            int iStartPos = link.OuterHtml.IndexOf("window.open('") + ("window.open('").Length;
            int iEndPos = link.OuterHtml.IndexOf("')", iStartPos);
            String url = link.OuterHtml.Substring(iStartPos, iEndPos - iStartPos);
            Process.Start("msedge.exe", url);
        };
    }
}

【讨论】:

  • 感谢@Yu Zhou 的回复。但这不起作用,因为 webBrowser1_DocumentCompleted 仅在通过锚进行导航时才会命中。但在我的情况下,所有锚点都是通过 javascript 方法 window.open('url') 打开的。在这种情况下,我无法使用 Web 浏览器控件获取链接。
  • window.open('url') 方法在哪里写?如果它是像<input type="button" onclick="javascript: window.open('url')" /> 这样的元素内联,可能有一些方法可以获取 url。如果window.open('url')方法在<script>标签中,我认为没有办法获取url。
  • 是的,我们像 <a href="#" onclick="javascript: window.open('ur')">Click</a> 一样使用它。我们如何获取 url 并使用 Process.Start()?
  • 如果有,可以先获取元素的OuterHtml,然后尝试截取字符串获取url。我更新了我的代码示例,你可以检查一下。我用<a href="#" onclick="javascript: window.open('https://www.bing.com/')">Click</a>这样的html代码进行测试,您可能需要根据您的情况更改示例代码。
  • 嗨于舟,我想你没有明白我的意思。实际上webBrowser1_DocumentCompleted 不会在通过 javascript 单击锚点时触发,如下所示:<a href="#" onclick="javascript: window.open('https://www.bing.com/')">Click</a>。如果我可以在锚点点击事件中登陆webBrowser1_DocumentCompleted,那么我可以像您在上面的帖子中那样处理所有事情。请注意,当我们像这样<a href="htttps:/www.google.com">Google</a>“导航”通过锚点时,只有webBrowser1_DocumentCompleted 运行。希望你得到我!
猜你喜欢
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
相关资源
最近更新 更多