确定WPF WebBrowser是否正在加载页面

问题描述:

我在窗口中有一个WPF System.Windows.Controls.WebBrowser控件。用户可以输入信息并在Web浏览器显示的网页中点击提交按钮。页面回发后,它使用脚本对象与我的应用程序进行通信。我需要确保一旦提交按钮被按下,表单不会关闭或以其他方式停止等待网页回传。如果我可以通过诸如“IsLoading”之类的属性检查WebBrowser或其文档的状态并且在加载时取消任何操作,那将是非常好的。我没有看到类似的东西,所以我想在Navigating事件上设置一个标志,并在Navigated或LoadCompleted事件中取消设置它,但是有一种情况是我单击网页上的一个链接(绑定到javascript,它不会进入新页面)导航触发,但导航和LoadCompleted从不触发。有没有办法根据需要确定浏览器的状态?确定WPF WebBrowser是否正在加载页面

不,看起来没有办法按需查询WPF浏览器的状态。我解决了我在Navigating事件处理程序中设置自己的标志并将其置于Navigated事件处理程序中的原始想法。这对我来说并不可靠,因为有一个脚本取消了导航(javascript:void(0))。

根据MSDN如果导航事件被调用,那么导航事件也将被解雇,除非您明确指定Cancel导航。我尝试了下面的代码片段,它似乎工作正常。 (即)导航事件后导航事件被触发时。

void Window1_Loaded(object sender, RoutedEventArgs e) 
    { 
     browser = new WebBrowser(); 
     browser.Navigate(new Uri("http://www.google.com")); 
     browser.Navigating += new NavigatingCancelEventHandler(browser_Navigating); 
     browser.Navigated += new NavigatedEventHandler(browser_Navigated); 
    } 

    void browser_Navigating(object sender, NavigatingCancelEventArgs e) 
    { 
     Console.WriteLine("Loading Webpage !!"); 
    } 

    void browser_Navigated(object sender, NavigationEventArgs e) 
    { 
     Console.WriteLine("Webpage Loaded !!"); 
    } 

如果这不是你在找什么,然后提供你所面临的问题的网页的URL。

+0

谢谢Karthik。不幸的是页面不公开,如果你只是在浏览器中访问它,它不会工作。这是为了插入我的应用程序。我确实发现,当链接包含href =“javascript:void(0)”时,它不会触发导航(显然取消导航)。我将其更改为href =“#”,现在它同时触发。我也发现,如果我加入返回false;到链接的onclick事件,Web浏览器不会触发任何事件。如果您将更新您的答案以专门解决问题,我会将其标记为答案。这些事件应该可以工作,但不会根据需要查询状态。 – xr280xr