webbrowser iframe在默认浏览器中打开

我有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 Maps,Digg图标等等)。

如何在Web浏览器控件和用户单击系统浏览器中的链接中加载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机器上发生了什么……

使用.NET中的Internet Explorer有一些关于AxWebBrowser的非常有价值的信息。