有没有办法检测我不知道的网页浏览器控件中的302重定向?也许某种神奇的潜在的非管理控制?
答案 0 :(得分:2)
我能够检测到NavigateError事件中的重定向。状态代码将为301或302.我设置了一个重定向发生的标志。然后在navigatecomplete2事件中,URL是重定向URL。在该事件处理程序中,我检查我的重定向标志,如果为true,则清除重定向标志并再次导航到新URL。这应该适用于多个重定向。这是VB6代码,但理论上应适用于任何WebBrowser实现。
Dim m_isRedirected as boolean
...
Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
If m_isRedirected Then
m_isRedirected = False 'clear the flag in case another redirect occurs
WebBrowser1.Navigate2 URL
End If
End Sub
Private Sub WebBrowser1_NavigateError(ByVal pDisp As Object, URL As Variant, Frame As Variant, StatusCode As Variant, Cancel As Boolean)
If StatusCode = 301 Or StatusCode = 302 Then m_isRedirected = True
End Sub
答案 1 :(得分:1)
不,使用普通的WebBrowser控件是不可能的。对底层非托管控件执行任何操作都非常复杂,如果这是您可以查看之后的内容 http://www.codeproject.com/KB/miscctrl/csEXWB.aspx虽然:
csEXWB是一个C#.NET 2.0控件 创造,主持和沉沦事件 原始的Webbrowser控件(不是 .NET或任何其他包装器)。高级 定制和完全控制 实现了Web浏览器控件 通过实施一些 接口,以及添加 许多方法,属性,事件和a COM库。
这包括能够查看页眉,这是检测HTTP重定向所需要做的。
答案 2 :(得分:0)
我发现了一个很好的解决方法...... 你可以做的是捕获/重载webbrowser.OnNavigating和OnNavigated事件。
通常在导航OnNavigating和OnNavigated事件时都会被调用。 但是,无论何时发生重定向,都会调用OnNavigated,但不会调用OnNavigating事件。
所以基本上我正在使用一个在OnNavigating事件中重置为0的计数器。 在OnNavigating我将计数器增加1。
在OnDocumentCompleted事件中,我将检查计数器: 如果counter == 1,则不会发生重定向 如果反击> 1,重定向已经发生。
到目前为止,这个技巧似乎对我有用。答案 3 :(得分:-1)
在WPF中使用WebBrowser控件,您可以查找导航事件。这不会提供状态代码,但您可以看到Web浏览器重定向到的URL,因此应该能够找出重定向何时发生。我对WinForms并不熟悉,但它可能会以类似的方式工作。
private void Browser_Navigating(object sender, NavigatingCancelEventArgs e)
{
System.Diagnostics.Trace.WriteLine(e.Uri);
}