Элемент управления WinForms WebBrowser обнаруживает перенаправления - PullRequest
3 голосов
/ 26 октября 2010

Есть ли какой-либо способ обнаружить перенаправления 302 в элементе управления веб-браузера, о которых я не знаю?Может быть, какая-то магия с неуправляемым контролем?

Ответы [ 4 ]

2 голосов
/ 17 марта 2016

Мне удалось обнаружить перенаправление в событии 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 голос
/ 30 декабря 2010

Нет, это невозможно при обычном элементе управления WebBrowser. Делать что-либо с базовым неуправляемым контролем выглядит очень сложно, если вы ищете то, что вам нужно, посмотрите на http://www.codeproject.com/KB/miscctrl/csEXWB.aspx хотя:

csEXWB - это элемент управления C # .NET 2.0, который создает, размещает и тонет события оригинальный веб-браузер управления (не .NET или любая другая обертка). продвинутый настройка и полный контроль над контроль Webbrowser достигнут через реализацию ряда интерфейсы, наряду с добавлением много методов, свойств, событий и Библиотека COM.

Это включает в себя возможность просмотра заголовков страниц, что вам нужно сделать, чтобы обнаружить перенаправление HTTP.

0 голосов
/ 28 марта 2014

Я нашел хороший обходной путь ... что вы можете сделать, это перехватить / перегрузить события webbrowser.OnNavigating и OnNavigated.

Обычно при навигации вызываются и события OnNavigating, и OnNavigated.Однако всякий раз, когда происходит перенаправление, вызывается OnNavigated, но НЕ событие OnNavigating.

, поэтому в основном я использую счетчик, который сбрасывается в событии OnNavigating на 0. В OnNavigating я увеличиваю счетчик на1.

в событии OnDocumentCompleted я проверю счетчик: если счетчик == 1, перенаправление не произошло, если счетчик> 1, перенаправления произошли.

, пока этот трюк, кажется, работает дляя.

0 голосов
/ 29 января 2011

Используя элемент управления WebBrowser в WPF, вы можете искать событие Navigating. Это не даст вам коды состояния, но вы можете увидеть URL-адреса, на которые перенаправлен веб-браузер, так что вы сможете определить, когда происходит перенаправление. Я не очень знаком с WinForms, но вполне может работать аналогичным образом.

private void Browser_Navigating(object sender, NavigatingCancelEventArgs e)
{
    System.Diagnostics.Trace.WriteLine(e.Uri);
}
...