从浏览器控件访问历史记录和其他内容
本文关键字:其他 记录 历史 浏览器 控件 访问 | 更新日期: 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。我只是发布了他所写内容的摘要。(