随着ajax的“大爆炸”,跟web带来了活力,但也带来了一下新的问题,比如下面将要讨论的“浏览器前进后退”的问题,由于局部刷新,url不变,浏览器感知不到“变化”,无法使用前进后退按钮。
解决问题之前
浏览器是如何记录访问历史并实现前进与后退的?
通常我们看到的浏览器地址栏URL的变化会被浏览器记录下来,还有页面中iframe子页面的地址变化也也会被浏览器记录,
浏览器将访问记录保存起来,以便进行前进和后退。
例如在http://www.google.com.hk后跟上不同的参数(或者不同的锚点),浏览器将会一一记录下来。
开始解决问题
知道了浏览器是如何记录访问历史的(URL的变化),那就可以解决ajax带来的不能前进后退的问题了,思路有二:
1.通过隐藏的iframe记录浏览历史来实现
实现思路:
在主页面中嵌入iframe,在每次触发ajax的请求的时候,将ajax请求的地址传递给iframe的子页面,此时浏览器将会
记录下iframe子页面地址的变化,当触发浏览器的前进后退按钮时,iframe的子页面地址会变化,此时iframe的子页
面中的js将会调用主页面中的相应js方法来调用对应的ajax请求。
2.通过URL中锚点或者参数的变化来实现
gmail、twitter和pip.io均使用这种方式来解决ajax前进后退的问题
有一定经验的开发者都有过对于ajax前进后退历史控制的经历,也涌现了不少的框架,不过发现这些框架对于设置了document.domain的会抱拒绝访问,其原因是因为动态创建的iframe没有设置document.domain,所以不灵了。
但这不是我要说的,我要说的是,当用户直接修改地址栏的hash并敲击回车后,这时候你就会发现历史控制失灵了。
大家要弄清楚,对于页面中有iframe的情况,iframe地址的变化(注意,通过window.location.href = hash;)会被浏览器记录在案,如果每次都是变化的iframe的地址,那前进后退都会改变iframe的地址,而不影响主页面。所以对于手动改动了地址栏的hash,改动的是主页面的hash,但不是href,所以需要同步到iframe中的href去,这样才可以在维系历史控制。
具体代码就不详细列出了,大家注意到这点就行了。
- 大小: 22.3 KB
分享到:
相关推荐
本文将深入探讨如何处理AJAX前进后退的问题,主要涉及`hash`技术的应用。 `hash`是URL中的井号(#)后面的部分,它在不重新加载整个页面的情况下可以改变,这对于实现AJAX应用的历史记录管理非常有用。浏览器会为每个...
然而,传统的浏览器后退和前进按钮在AJAX应用中可能会导致用户体验下降,因为它们可能无法正确反映页面状态的变化。本文将详细介绍如何使用JavaScript来实现AJAX支持的浏览器后退和前进功能,以提供更流畅的导航体验...
dhtmlHistory.js在Firefox下应用是没有问题的,但在ie下会有问题,主要原因是它不能脱离一个服务器环境,需要布置到一个真实的服务器下才能使用: 把 dhtmlHistory.js beat.html blank.html三个文件放到 C:\Program ...
现在,我们来看如何解决Ajax前进/后退问题。当使用Ajax加载新内容时,浏览器的历史记录不会自动更新,导致前进/后退功能失效。为此,可以使用`pushState`和`replaceState`方法来自定义历史记录: ```javascript // ...
然而,传统的Ajax请求可能会导致浏览器的后退和前进按钮失效,因为它们没有更新浏览器的历史记录。本篇将探讨如何在使用Ajax时正确处理浏览器的后退和前进功能。 首先,了解浏览器的后退和前进机制。当用户点击...
本文主要给大家介绍基于Jquery.history解决ajax的前进后退问题,涉及到jquery前进后退相关方面的知识,本文内容经典,非常具有参考价值,特此把jquery前进后退相关知识分享在脚本之家网站供大家参考
传统的浏览器前进后退操作在Ajax加载的单页面应用中变得无效,因为浏览器的历史记录并未更新。为了解决这一问题,我们可以通过HTML5提供的history对象的pushState、replaceState方法和onpopstate事件来实现页面的...
暂不讨论在某些页面内容大量更新的情况下是否该使用AJAX的问题,本文简单说一下保留浏览器前进、后退、刷新等功能。 这里假设一个有两个Tabs的页面,每个Tab中含有大量文字,可能还有图片。如果现在觉得Tab2的内容很...
文章主要讨论了如何解决这个问题,即“让浏览器记住AJAX请求并能前进和后退”。这种方法的核心在于利用了HTML5 History API中的`pushState`方法和`replaceState`方法,以及改变URL的hash部分(即URL中的#后内容)来...
1. AJAX与浏览器前进后退的问题: AJAX技术(Asynchronous JavaScript and XML)允许网页动态地更新内容,而无需重新加载整个页面。这种技术极大地提高了用户体验。然而,传统的浏览器历史记录功能(前进和后退按钮...
但在使用AJAX加载页面内容时,浏览器的前进和后退功能往往会被破坏。本例将介绍如何在使用jQuery进行AJAX内容加载时,让浏览器的前进和后退按钮能够正常使用。 首先需要了解的是,在传统页面跳转中,浏览器会保存...
然而,这也会带来一个问题,即使用Ajax操作后,浏览器的历史记录无法正确处理后退和前进操作。本文将详细介绍如何利用JavaScript中的`history`对象API解决这个问题。 `history`对象提供了`pushState()`和`...
3. 前进后退问题:Ajax请求不会改变浏览器历史记录,可能导致前进后退功能失效。 4. 用户体验问题:若网络连接不稳定,可能造成页面加载不完整。 总结,Ajax技术是现代Web开发中的重要工具,通过它可以构建更加交互...
3. **前进/后退按钮**:如果处理不当,用户可能无法正确使用浏览器的历史记录功能。 在实际应用中,为了简化Ajax的开发,我们可以使用jQuery、axios、fetch等库或API。例如,jQuery的$.ajax()或$.getJSON()方法提供...
本文将详细介绍如何利用这些技术解决AJAX页面的前进后退问题。 #### 二、AJAX的局限性 1. **前进后退功能失效**:由于AJAX请求不会导致整个页面的重载,因此浏览器不会将新的状态添加到历史记录中,这使得用户无法...