我有 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 地图、Digg 图标等)。
如何保持 iframe 在 Webbrowser 控件中加载以及用户在系统浏览器中单击的链接?
我得出的结论是.NET WebBrowser 组件在这方面几乎没有用处。我尝试过阅读WebBrowserNavigatingEventArgs.TargetFrameName
但它会返回name
仅当 HTML 文档具有 iframe 元素的属性时。不然会吐出一个空的""
细绳。在非框架链接上返回 null 会更有用。
因此,我找到的唯一修复方法是使用 AxWebBrowser 控件,并专门监听 BeforeNavigate2 事件。我没有进行尽可能多的测试,但似乎“flags”属性DWebBrowserEvents2_BeforeNavigate2Event
被设定为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 机器上会发生什么......
使用 .NET 中的 Internet Explorer http://www.webtropy.com/articles/InternetExplorer.asp有一些关于 AxWebBrowser 的非常有价值的信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)