没有互联网时WPF Webbrowser控制问题

时间:2013-08-13 19:44:59

标签: wpf vb.net internet-explorer browser webbrowser-control

我的项目中有一个Web浏览器控件。效果很好!但是,如果我松开连接到互联网然后打开项目,IE打开并显示标准无法显示网页。

我更喜欢我的项目中的Web浏览器控件显示此消息,而不是在互联网连接丢失时弹出IE浏览器窗口。

谢谢!

2 个答案:

答案 0 :(得分:2)

我没有在我的机器上看到IE打开,但我确实看到WebBrowser控件中显示正常的IE错误消息。

我相信您可以通过处理WebBrowser的Navigated事件并查看文档的url属性来检测网页未正确加载。这是一些XAML:

<WebBrowser Source="http://www.google.com" Navigated="WebBrowser_Navigated" />

还有一些代码(我不做VB,抱歉):

private void WebBrowser_Navigated(object sender, NavigationEventArgs e) {
    var browser = sender as WebBrowser;
    if (browser != null) {
        var doc = browser.Document as HTMLDocument;
        if (doc != null)
            MessageBox.Show(doc.url);
    }
}

在我的机器上,当导航失败时,我得到了这个URL:

  

RES:ieframe.dll / navcancl.html#http://www.google.com

虽然我认为我们不能指望URL一直都是这样,但我打赌你可以检查它并确定它不是你想要的URL。事实上,“http:”现在是“res:”。当您看到这种情况发生时(并且不要指望它),您可以使浏览器指向本地源以显示消息。

答案 1 :(得分:2)

您可以通过导入 System.Net.NetworkInformation 命名空间来执行此操作。 NetworkChange类公开名为 NetworkAvailabilityChanged 的事件,该事件负责通知应用程序连接状态更改。请找到以下代码段。如果有用,请标记答案。

public partial class MainWindow : Window
{
    public bool IsAvailable { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        NetworkChange.NetworkAvailabilityChanged += NetworkChange_NetworkAvailabilityChanged;
    }

    void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
    {
        IsAvailable = e.IsAvailable;
    }


    private void BrowseButton_Click(object sender, RoutedEventArgs e)
    {
        if (IsAvailable)
        {
            WebBrowser1.Navigate(TextBox1.Text);    
        }
        else
        {
            MessageBox.Show("Your Popup Message");
        }
    }
}