我正在使用 ASP.NET Ajax 编写一个简单的相册应用程序。
该应用程序使用异步 Ajax 调用来预加载相册中的下一张照片,而无需更改浏览器中的 URL。
问题是当用户点击浏览器中的后退按钮时,应用程序不会返回到上一张照片,而是导航到应用程序的主页。
有没有办法欺骗浏览器将每个 Ajax 调用添加到浏览历史记录中?
我正在使用 ASP.NET Ajax 编写一个简单的相册应用程序。
该应用程序使用异步 Ajax 调用来预加载相册中的下一张照片,而无需更改浏览器中的 URL。
问题是当用户点击浏览器中的后退按钮时,应用程序不会返回到上一张照片,而是导航到应用程序的主页。
有没有办法欺骗浏览器将每个 Ajax 调用添加到浏览历史记录中?
更新:现在有 HTML5 History API(pushState、popState),它弃用了 HTML4hashchange
功能。History.js提供跨浏览器兼容性和 HTML4 浏览器的可选 hashchange
回退。
这个问题的答案与我对这些问题的答案或多或少相同:
总之,你肯定想看看这两个项目,它们解释了整个 hashchange 过程并将 ajax 添加到混合中:
jQuery 历史(使用哈希来管理您的页面状态并绑定到更改以更新您的页面)。
jQuery Ajaxy(jQuery History 的 ajax 扩展,允许完整的 ajax 网站,同时完全不显眼并且可以优雅地降解)。
MSDN 有一篇关于在 ASP.NET AJAX 中管理浏览器历史记录的文章
许多网站使用隐藏的 iframe 来执行此操作,只需使用新 URL 刷新 iframe,即可将其添加到浏览历史记录中。然后,您所要做的就是处理您的应用程序如何对这些“后退按钮”事件做出反应——您要么需要检测 iframe 的状态/位置,要么使用该 URL 刷新页面。
您可以使用简单且轻量级的 PathJS库。
使用示例:
Path.map("#/page1").to(function(){
...
});
Path.map("#/page2").to(function(){
...
});
Path.root("#/mainpage");
Path.listen();
信息:Ajax 导航是即将到来的 IE8 的常规功能。
3.5 SP1 更新现在支持 ASP.NET ajax 中的浏览器历史记录和后退按钮。
对于所有关于后退按钮的解决方案,它们都不是“自动的”。对于每一个,您都必须做一些工作来保持页面的状态。所以不,没有办法“欺骗”浏览器,但是有一些很棒的库可以帮助您使用后退按钮。
如果您使用的是 Rails,那么一定要尝试 Wiselinks https://github.com/igor-alexandrov/wiselinks。它是浏览器状态管理的一把瑞士军刀。以下是一些细节:http: //igor-alexandrov.github.io/blog/2013/07/11/the-way-to-wiselinks-1-dot-0/。