Измените Uri в WebBrowser. Навигация - PullRequest
1 голос
/ 17 февраля 2012

Возможно ли в обработчике события Navigating изменить Uri, к которому перемещается элемент управления WebBrowser?

Uri в аргументах события не может быть изменен, поскольку он доступен только для чтения, однако я попытался отменить навигацию и отправить браузер на новый адрес с помощью метода Navigate, например:

// I can not do this.
// e.Uri = new Uri( "http://newUri" );

e.Cancel = true;
( (WebBrowser)sender ).Navigate( new Uri( "http://newUri" ) );

однако, это приводит к аварийному завершению моего приложения без каких-либо исключений.

Кто-нибудь знает решение этой проблемы?

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

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

Попробуйте добавить логическое значение, чтобы остановить повторяющийся код ...

private bool isRedirecting = false;

private void WebBrowser_OnNavigate(object sender, EventArgs e)
{
  if (isRedirecting)
    return;

  e.Cancel = true;

  isRedirecting  = true;
  ( (WebBrowser)sender ).Navigate( new Uri( "http://newUri" ) );
  isRedirecting = false;
}
0 голосов
/ 20 февраля 2012

Оказалось, что это ошибка эмулятора.Мой подход приводит к аварийному завершению работы приложения на эмуляторе, но на реальном устройстве оно работает правильно.

...