从浏览器控件访问历史记录和其他内容

本文关键字:其他 记录 历史 浏览器 控件 访问 | 更新日期: 2023-09-27 17:50:31

我如何从浏览器控件访问历史记录和cookie,目前使用的列表框可以添加会话中的每个站点,但它不是很可靠,也无法使用后退按钮。

windows手机上的后退按钮也有代码吗?GoBack();不起作用。

从浏览器控件访问历史记录和其他内容

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

我在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(

总结如下:

  • 并非所有应用程序都需要此集成。如果你只是显示一个页面,并且不想鼓励导航,请使用提示用户界面是瞬态的用户体验模式——让它看起来像一个弹出窗口,在弹出窗口上放一个关闭按钮
  • 如果你有一个鼓励在浏览器中导航的应用程序,请考虑上面的模式。不要因为认证要求而这么做,而是因为这对用户来说是直观的。这就是要求存在的原因
  • 如果你觉得你的应用程序不属于上述任何一种,那么一定要向认证团队申请例外。也就是说,我强调你应该茁壮成长,为你的用户创造直观的体验。我认为这两种选择效果最好,所以我推荐它们——而不是借口/例外途径

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

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