使用 Ajax 时如何保持浏览器历史同步?

IT技术 javascript asp.net ajax hashchange
2021-03-21 10:26:39

我正在使用 ASP.NET Ajax 编写一个简单的相册应用程序。
该应用程序使用异步 Ajax 调用来预加载相册中的下一张照片,而无需更改浏览器中的 URL。

问题在于,当用户单击浏览器中后退按钮时,应用程序不会返回到上一张照片,而是导航到应用程序的主页。

有没有办法诱使浏览器将每个 Ajax 调用添加到浏览历史记录中?

6个回答

更新:现在有 HTML5 History API(pushState、popState),它弃用了 HTML4hashchange功能。History.js提供跨浏览器兼容性和HTML4 浏览器可选 hashchange回退。

这个问题的答案或多或少与我对这些问题的答案相同:

总之,您肯定想查看这两个项目,它们解释了整个 hashchange 过程并将 ajax 添加到组合中:

  • jQuery History(使用哈希来管理页面状态并绑定到更改以更新页面)。

  • jQuery Ajaxy(jQuery History 的 ajax 扩展,允许完整的 ajax 网站,同时完全不显眼且可优雅地降级)。

@Keltex 我现在已经用指向 MSDN 的链接替换了该链接。谢谢 :)
2021-04-24 10:26:39

许多网站使用隐藏的 iframe 来执行此操作,只需使用新 URL 刷新 iframe,将其添加到浏览历史记录中。然后您所要做的就是处理您的应用程序如何对那些“后退按钮”事件做出react——您要么需要检测 iframe 的状态/位置,要么使用该 URL 刷新页面。

如果我理解正确,iframe 实际上会将非 ajax 请求发送到服务器。这对服务器来说将是不必要的负载。对于低流量站点可能没问题,但这绝对不是一个好的解决方案 - 如果发生请求。
2021-04-27 10:26:39

您可以使用简单且轻量级的PathJS库。

用法示例:

Path.map("#/page1").to(function(){
    ...
});

Path.map("#/page2").to(function(){
    ...
});

Path.root("#/mainpage");
Path.listen();

3.5 SP1 更新现在支持 ASP.NET ajax 中的浏览器历史记录和后退按钮。