在WebBrowser.Navigating中更改Uri

时间:2012-02-17 15:12:39

标签: c# windows-phone-7 windows-phone-7.1 windows-phone

是否可以在Navigating事件的处理程序中更改WebBrowser控件正在导航的Uri?

事件参数中的Uri无法更改,因为它是只读的,但是,我尝试取消导航并使用Navigate方法将浏览器发送到新地址,如下所示:

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

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

然而,这使我的应用程序崩溃,没有任何例外。

有人知道这个问题的解决方案吗?

2 个答案:

答案 0 :(得分:1)

我的猜测是你导致堆栈溢出。每次导航事件触发时,您都会告诉浏览器再次导航,这会再次引发事件......

尝试添加布尔值以停止代码递归...

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;
}

答案 1 :(得分:0)

事实证明这是一个模拟器错误。我的方法使应用程序在模拟器上运行时崩溃,但它在真实设备上正常运行。