2014-07-13 108 views
3

我需要从web浏览器加载页面获取HTTP状态代码,我结束了此解决方案:如何在WebBrowser控件中获取当前状态代码?

我使用NavigateError事件从WebBrowserActiveXInstance实例。但它不能正常工作:如果页面无法加载并且用户wb.Refresh()它和加载没问题,并且我只有一个错误(只有方法名称才会提示),我才会得到一个状态代码保存旧的http状态错误代码,因为成功加载不会更改我的http状态代码。我该如何解决这个问题?

public doSomething() 
{ 
    SHDocVw.WebBrowser axBrowser = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance; 
    axBrowser.NavigateError += new SHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(axbrowser_navigatorError); 
} 

public void axbrowser_navigatorError(object pDIsp, ref object URL, ref object frame, ref object statusCode, ref bool Cancel) 
{ 
    statuscodeLabel.Text = statusCode.ToString(); 
    int.TryParse(statusCode.ToString(), out httpCode); 
} 
+1

NavigateComplete2在没有错误时触发。所以用它来重置你的状态码。 –

+0

使用这个我可以假设没有错误发生,但不能得到http状态码,因为它的参数是'object pDisp,ref object url',其中'pDsip'是一个'WebBrowser'实例(我们无法获得http状态代码没有我的'axbrowser_navigatorError()')和'url'是我们正在处理的url,对吧? – Jack

+0

它看起来就像是WebBrowser的DocumentCompleted等价物...... – Jack

回答

1

WebBrowserRefreshNavigate/Navigate2完全不同。没有NavigateComplete2为Refresh刷新。我不认为你可以得到Refresh的状态代码,除非你使用一些低级的APP handler钩子。相关:Wpf WebBrowser Refresh

0

您可以获取从NavigationEventArgs上LoadComplete(在WebResponse)刷新页面时,这也应该引起。

+0

这是一个类的方法吗?我无法在“WebBrowser”或“(SHDocVw.WebBrowser)webBrowser1.ActiveXInstance”中找到它。这是你说的那个msdn.microsoft.com/en-us/library/system.web.ui.page.loadcomplete(v=vs.110).aspx? – Jack

+0

您可以使用工具箱中的WebBrowser控件吗?这个包装ActiveX,但增加了更多的控制。 –

+0

这就是我正在使用的。注意'doSomething()'函数中的强制转换。您只能使用WebBrowser获取http状态码。 – Jack

相关问题