gpt4 book ai didi

c# - webbrowser iframe 在默认浏览器中打开

转载 作者:太空宇宙 更新时间:2023-11-03 11:52:58 24 4
gpt4 key购买 nike

我有 WebBrowser 控件可以在我的默认浏览器中打开链接,如下所示:

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

这很好用,但如果我加载一个包含一些 IFrame 元素的文档,这些元素也会在系统浏览器中打开(主要是嵌入式内容,如 Google map 、Digg 图标等)。

如何在 Webbrowser 控件中保持 iframe 加载并在系统浏览器中保持用户点击链接?

最佳答案

我得出的结论是 .NET WebBrowser 组件在这方面几乎毫无用处。我试过阅读 WebBrowserNavigatingEventArgs.TargetFrameName 但只有当 HTML 文档具有 iframe 元素时,它才会返回 name 属性。否则它会吐出一个空的 "" 字符串。在非框架链接上返回 null 会更有用。

因此,我为此找到的唯一修复方法是使用 AxWebBrowser 控件,并专门监听 BeforeNavigate2 事件。我没有进行应有的测试,但每次用户触发时,DWebBrowserEvents2_BeforeNavigate2Event 中的“flags”属性似乎都设置为 64

private void axWebBrowser1_BeforeNavigate2(object sender, AxSHDocVw.DWebBrowserEvents2_BeforeNavigate2Event e)
{
// 64 means user triggered
if ((int)e.flags == 64 && e.uRL.ToString() != "about:blank")
{
e.cancel = true;
System.Diagnostics.Process.Start(e.uRL.ToString());
}
}

MSDN 文档说 flags 是 IE7+ 的唯一参数,所以我不知道在 IE6 机器上会发生什么......

Using Internet Explorer from .NET有一些关于 AxWebBrowser 的非常有值(value)的信息。

关于c# - webbrowser iframe 在默认浏览器中打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1582809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com