Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Ajax时如何保持浏览器历史同步?_Javascript_Asp.net_Ajax_Hashchange - Fatal编程技术网

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

Javascript 使用Ajax时如何保持浏览器历史同步?,javascript,asp.net,ajax,hashchange,Javascript,Asp.net,Ajax,Hashchange,我正在使用ASP.NET Ajax编写一个简单的相册应用程序。 该应用程序使用异步Ajax调用预加载相册中的下一张照片,而不更改浏览器中的URL 问题在于,当用户单击浏览器中的返回按钮时,应用程序不会返回到上一张照片,而是导航到应用程序的主页 有没有办法欺骗浏览器将每个Ajax调用添加到浏览历史记录中?MSDN有一篇文章介绍了许多网站利用隐藏的iframe来实现这一点,只需使用新的URL刷新iframe,即可将其添加到浏览历史记录中。然后,您所要做的就是处理应用程序对这些“后退按钮”事件的反应-

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

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


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

MSDN有一篇文章介绍了许多网站利用隐藏的iframe来实现这一点,只需使用新的URL刷新iframe,即可将其添加到浏览历史记录中。然后,您所要做的就是处理应用程序对这些“后退按钮”事件的反应-您需要检测iframe的状态/位置,或者使用该URL刷新页面。

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

有关后退按钮的所有解决方案,它们都不是“自动的”。对于每一个页面,您都必须做一些工作来保持页面的状态。因此,没有办法“欺骗”浏览器,但是有一些很棒的库可以帮助你点击后退按钮。

信息:Ajax导航是即将到来的IE8的一个重要功能。

更新:现在有了HTML5历史API(pushState,popState),它不支持HTML4
hashchange
功能。为HTML4浏览器提供跨浏览器兼容性和
hashchange
回退功能。

这个问题的答案与我对这些问题的回答大致相同:

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

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

  • (jqueryhistory的ajax扩展,允许完整的ajax网站,同时完全不引人注目且可正常降解)


您可以使用简单而轻量级的lib

用法示例:

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

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

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

如果您使用的是Rails,那么一定要尝试Wiselinks。这是一把用于浏览器状态管理的瑞士军刀。以下是一些详细信息:。

@Keltex我现在已将链接替换为指向MSDN的链接。谢谢:)如果我理解正确,iframe实际上会将非ajax请求发送到服务器。这将是服务器不必要的负载。对于低流量的站点可能没问题,但如果请求发生,这绝对不是一个好的解决方案。