webbrowser iframe在默认浏览器中打开

时间:2009-10-17 17:56:25

标签: c# browser

我有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?

1 个答案:

答案 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的非常有价值的信息。