2012-01-24 2 views
4

Я использую контрольКак узнать, является ли загруженная страница страницей с ошибкой или действительной страницей в System.Windows.Forms.WebBrowser?

System.Windows.Forms.WebBrowser 

в C# для отображения некоторых страниц. Я хочу сделать некоторые пользовательские работы, когда пользователь нажимает на URL-адрес страницы, которая не существует.

В основном я хочу установить некоторые значения, когда браузер отображает следующее сообщение

The page cannot be displayed 
The page you are looking for is currently unavailable. The Web site might be experiencing technical difficulties 

Как я могу получить статус, так что я могу differenciate между страницей загруженной и страницы ошибок?

+0

Это действительно не работает. Многие интернет-провайдеры просто перенаправляются на какую-то рекламирующую страницу нежелательной почты. Вам нужен авторитетный DNS-сервер, например 8.8.8.8 –

ответ

2

Если вы разыгрываете WebBrowser к основной реализации ActiveX, вы можете получить доступ событие NavigateError.

Примечание. Вам необходимо добавить ссылку на SHDocVw. Смутно, это на вкладке COM с именем «Controls Интернет Microsoft» с пути C: \ Windows \ system32 \ ieframe.dll

private void button1_Click(object sender, EventArgs e) 
     { 
      //Note: you need to wait until the ActiveXInstance property is initialised. 
      var axWebBrowser = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance; 
      axWebBrowser.NavigateError += axWebBrowser_NavigateError; 
      webBrowser1.Url = new Uri("http://www.thisisnotavaliddomain.com"); 
     } 

     void axWebBrowser_NavigateError(object pDisp, ref object URL, ref object Frame, ref object StatusCode, ref bool Cancel) 
     { 
      //handle your error 
     } 
+0

Это работает для меня, спасло меня от чрезмерного расширения класса веб-браузера. – CodeMe

1

Вы можете использовать метод CreateSink для управления WebBrowser для доступа к событию NavigateError базового элемента управления ActiveX WebBrowser. Элемент управления System.Windows.Forms.WebBrowser является управляемой оболочкой для элемента управления WebBrowser ActiveX, но он не переносит все функции этого элемента управления ActiveX. Событие NavigateError доступно на неуправляемом элементе управления веб-браузером ActiveX. CreateSink позволит вам расширить функциональность управления System.Windows.Forms.WebBrowser, чтобы вы могли обработать событие NavigateError.

Из документации:

Этот метод полезен, если вы знакомы с разработкой OLE использованием неуправляемый WebBrowser ActiveX управления, и вы хотите расширить функциональность Windows Forms управления WebBrowser, который является управляемая оболочка для элемента управления ActiveX. Вы можете использовать эту расширяемость для реализации событий из элемента управления ActiveX, которые являются , не предоставленными элементом управления оберткой.

MSDN имеет полный пример здесь:
http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.createsink.aspx

+0

Я не пробовал это, другой ответ спас меня от реализации расширенного класса. – CodeMe

+0

Рад, что вы смогли получить эту работу. Я думаю, что мой подход не позволяет вам добавлять ссылку на SHDocVw, но, конечно, мой подход более сложный, чем другой ответ. – rsbarro

+0

Я не профессионал, но ссылаюсь на эту сборку, вызывая проблемы при развертывании на клиенте или некоторых других проблемах? – CodeMe

Смежные вопросы