我在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的建议实现一个对我来说很好的堆栈。