2

在当前使用从会话中添加每个站点的列表框时,我将如何从浏览器控件访问历史记录和 cookie,但它不是很可靠并且不能与后退按钮一起使用。

windows phone 上是否还有返回按钮的代码?GoBack();不起作用。

4

1 回答 1

4

您可以将您在 webbrowser 控件中导航的页面添加到应用程序的历史堆栈中,以便用户可以使用手机的后退按钮进行导航。

我在 MSDN 博客上发现了一篇关于这个问题的非常有趣的文章,可以在这里找到。我将发布一小部分代码作为备注。

1) 监听 WebBrowser.Navigated 事件;跟踪已访问的页面。

Stack<Uri> history= new Stack<Uri>();
Uri current = null; 
private void WebBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    Uri previous = null;           
    if (history.Count > 0)
        previous = history.Peek();

    // This assumption is NOT always right. 
    // if the page had a forward reference that creates a loop (e.g. A->B->A ), 
    // we would not detect it, we assume it is an A -> B -> back () 
    if (e.Uri == previous)
    {
        history.Pop();                     
    }
    else
    {
        if (current != null)
            history.Push(current);                          
    }
    current = e.Uri; 
}

2) 收听页面上的 OnBackKeyPress。如果 WebBrowser 有导航堆栈,请取消后退键并在 webbrowser 控件的堆栈中导航。

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
    base.OnBackKeyPress(e);

    if (!isPerformingCloseOperation) 
    {
        if (history.Count > 0)
        {                        
            Uri destination = history.Peek();
            webBrowser.Navigate(destination);
            // What about using script and going history.back? 
            // you can do it, but 
            // I rather use that to keep ‘track’ consistently with our stack 
            e.Cancel = true;
        }
    } 
}

请注意,仍然有一些边缘情况没有很好地实现。

如您所见,代码是微不足道的,但它有一个未解决的问题。它无法区分:

  • 导航(a)->导航(b)->返回();
  • 导航(a) -> 导航(b) -> 导航(a);

最后,总结一下:

  • 并非所有应用程序都需要这种集成。如果您只显示一个页面,并且不想鼓励导航,请使用一种 UX 模式来提示用户 UI 是瞬态的——让它看起来像一个弹出窗口,在弹出窗口上放置一个关闭按钮'</li >
  • 如果您的应用确实鼓励在浏览器中导航,请考虑上述模式。不要因为认证要求而这样做,因为它对用户来说是直观的。这就是存在需求的原因。
  • 如果您认为您的应用程序不属于上述任何一项,请向认证团队请求例外处理。也就是说,我强调你应该努力为你的用户创造一种直观的体验。我认为这两个选项做得最好,所以我推荐它们——而不是借口/例外路线——。

我希望你能用这个做点什么。

(完全归功于编写博客和代码的 Jaime Rodriguez。我只是发布他所写内容的摘要。)

于 2013-01-03T23:34:15.343 回答