【发布时间】:2011-04-05 05:22:56
【问题描述】:
有什么方法可以更改 URL 或向“后退按钮”添加更多历史记录,而无需刷新整个页面?
我的应用程序是基于 AJAX 的,我想在历史记录中添加一些“撤消”事件,以便用户可以简单地回击并保留旧值。
今天有什么可能?我听说其中一些可能在 HTML5 中,但尚未检查当前浏览器支持的内容。
【问题讨论】:
标签: ajax query-string hashchange browser-state
有什么方法可以更改 URL 或向“后退按钮”添加更多历史记录,而无需刷新整个页面?
我的应用程序是基于 AJAX 的,我想在历史记录中添加一些“撤消”事件,以便用户可以简单地回击并保留旧值。
今天有什么可能?我听说其中一些可能在 HTML5 中,但尚未检查当前浏览器支持的内容。
【问题讨论】:
标签: ajax query-string hashchange browser-state
可以使用 ASP.NET 的内置脚本管理器来更新浏览器的历史记录。完整的操作方法位于此处:
http://www.asp.net/aspnet-in-net-35-sp1/videos/introduction-to-aspnet-ajax-history
【讨论】:
这个问题的答案和我对这些问题的答案差不多:
总之,您可能想看看两个项目,它们解释了整个 hashchange 过程并将其与 ajax 一起使用:
jQuery History(使用哈希来管理您的页面状态并绑定到更改以更新您的页面)。
jQuery Ajaxy(jQuery History 的 ajax 扩展,允许完整的 ajax 网站同时完全不显眼且可优雅地降解)。
【讨论】:
您可以使用301 redirection。就个人而言,我会在客户端使用 cookie,或者在后端使用会话来存储面包屑。在 URL 中存储状态信息对于 AJAX 应用程序来说是个坏主意,因为人们可能会返回到服务器端未处于正确状态来响应的 url。
另一种选择是提供您自己的后退按钮,该按钮知道要返回到哪个页面。
【讨论】:
我认为您可以使用window.location.hash 来跟踪页面的#part,在您的情况下,#state1、#state2 等等。
window.location.hash = '#state' + (++ stateN) 设置和
stateN = parseInt(window.location.hash.match(/\d+$/)[0])
有关如何检测位置哈希更改的更多详细信息,请参阅On - window.location.hash - Change?。
【讨论】: