Переопределение события щелчка webBrowser - PullRequest
3 голосов
/ 21 марта 2012

Мне нужна информация о том, что происходит, когда пользователь нажимает гиперссылку в элементе управления webBrowser. Я думаю, что он вызывает метод .Navigate(), но я не уверен.

Я создал метод-обертку, который оборачивается вокруг метода навигации. Что я хочу сделать, так это то, что когда пользователь щелкает ссылку, кнопку или что-то еще, мой метод вызывается вместо метода .Navigate().

Что мне нужно сделать, чтобы добиться этого?

Спасибо

Редактировать: Кажется, есть некоторые проблемы с пониманием моего вопроса, позвольте мне попытаться перефразировать:

Я создал свой собственный элемент управления webBrowser, который наследуется от WebBrowser. В моем контроле есть метод, который я использую для навигации, который делает несколько шагов перед тем, как вызвать метод navigate ().

Теперь вызвать этот метод из моего кода просто, просто вызовите мой метод вместо .Navigate. Но я хочу, чтобы, когда пользователь щелкает ссылку на странице, мой метод запускается вместо .Navigate.

Ответы [ 5 ]

5 голосов
/ 21 марта 2012

Нет необходимости переопределять, просто прикрепите обработчик события к каждой ссылке на странице в событии WebBrowser.DocumentCompleted.

private bool bCancel = false;

private void webBrowser_DocumentCompleted(object sender,
                                 WebBrowserDocumentCompletedEventArgs e)
{
  int i;
  for (i = 0; i < webBrowser.Document.Links.Count; i++)
  {
     webBrowser.Document.Links[i].Click += new    
                            HtmlElementEventHandler(this.LinkClick);
  }
}
private void LinkClick(object sender, System.EventArgs e)
{
  bCancel = true;
  MessageBox.Show("Link Was Clicked Navigation was Cancelled");
}
private void webBrowser_Navingating(object sender, 
                                WebBrowserNavigatingEventArgs e )
{
  if (bCancel == true)
  {
     e.Cancel=true;
     bCancel = false;
  }
}

Надеюсь, это поможет!

РЕДАКТИРОВАТЬ:

Если вы хотите найти больше информации о ссылке, по которой щелкнули, просто изменитеОбработчик события LinkClick с чем-то вроде этого:

private void LinkClick(object sender, System.EventArgs e)
{
    HtmlElement element = ((HtmlElement)sender);
    string id = element.Id;
    string href = element.GetAttribute("href");

    bCancel = true;
    MessageBox.Show("Link Was Clicked Navigation was Cancelled");        
}
4 голосов
/ 21 марта 2012

Событие навигации инициируется. Вы можете реализовать обработчик событий, чтобы он отклонял и перенаправлял запрос навигации:

    private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) {
        // Redirect expertsexchange to stackoverflow
        if (e.Url.ToString().Contains("experts-exchange")) {
           e.Cancel = true;
           webBrowser1.Navigate("http://stackoverflow.com");
        }
    }
2 голосов
/ 21 марта 2012

Если я вас правильно понимаю, то вы идете не в ту сторону.

Просто посмотрите на HTML-код гиперссылки.Если это простая ссылка, то она просто идет в Navigate.Если есть какой-то вызов функции скрипта, вы можете увидеть, что делает функция.

0 голосов
/ 09 января 2016

Вы просматриваете событие, когда ссылка нацелена на другое окно.

Предположим, что ссылка имеет target = "_ new", в этом случае событие навигации никогда не запускается, потому что это новый веб-браузер, который фактически открывает URL.

0 голосов
/ 21 марта 2012

попробуйте сделать это через Jquery

$('a').click(function(e){
    e.preventDefault();
    __doPostBack('functionForClick','');
});

Хотя не пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...