我有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元素的文档,那么它们也会在系统浏览器中打开(大多数是嵌入式的东西,比如谷歌地图,Digg图标等)。
如何在系统浏览器中的Webbrowser控件和用户点击的链接中加载iframe?
答案 0 :(得分:2)
我得出的结论是.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的非常有价值的信息。