如何在Wp7应用程序中处理Web浏览器的前后导航



我在windows phone 7应用程序中使用web浏览器。我只想知道如何像任何桌面浏览器一样处理它的前后导航。以及如何阻止特定的导航。

我在这里和其他很多地方都提到过,但找不到适合我的东西。请帮忙。

您可以通过处理OnNavigation事件来取消导航

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
//cancel navigation
e.Cancel = true;
}

要返回,您可以在页面上执行javascript。

webBrowser.InvokeScript("eval","history.go(-1)");

前进:

webBrowser.InvokeScript("eval","history.go(1)");

如果eval在页面上被阻止,则此网站可能对备选方案有用。不要忘记将webBrowser.IsScriptEnabled设置为true

要使其像桌面浏览器一样工作,可以实现stack

你将前后按下两个按钮。当用户在浏览器中导航到下一个URL时,您将它们推到历史堆栈中,当他想通过按下"后退"按钮返回时,您以编程方式导航到历史堆栈中的第一个URL,并将其从历史堆栈中弹出,这样他就可以向后导航,直到堆栈中有一些URL。类似地,对于forward,当他向后导航时,您将URL推入forward堆栈,每当他按下forward按钮时,您都会导航到forwardstack中的第一个元素,并将其弹出,依此类推,直到Forwardstack剩下URL为止。一旦他导航到某个url,而您没有从正向堆栈导航到该url,则清空正向堆栈,并在他向后移动时再次填充。

通过这种方式,您甚至可以在列表中显示历史URL,也可以随心所欲地显示。

关于导航取消,这是链接中的代码,在你的问题下的评论中,它应该可以工作。

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
//cancel navigation
e.Cancel = true;
}

前面的答案会起作用,但您可以使一个可行的解决方案变得更简单,因为WebBrowser控件有一个内部导航堆栈。

将前进和后退按钮控件添加到UI中。在他们每个人的动作程序中:

private void forwardButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
WebBrowser editWB = sender as WebBrowser;
if (editWB != null && editWB.CanGoForward)
editWB.GoForward();
}

你可以更喜欢:在WebBrowser.LoadComplete事件(而不是FrameworkElement.Loaded事件)中,你可以测试.CanGoForward和.CanGoBack,并适当地选择性地启用或禁用按钮。

我试图实现BobHy提出的想法,但失败了,因为在我的WP7/VS2010 Express中,我没有找到WebBrowser的CanGoForward方法。我在用户控件的画布中使用它,这可能会影响体验。

然而,我在http://developer.nokia.com/community/wiki/WebBrowser_Control_Techniques_in_Windows_Phone按照Parveen的建议实现一个对我来说很好的堆栈。

最新更新