`
shaomeng95
  • 浏览: 222525 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ajax前进后退问题

阅读更多

随着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前进后退的处理

    本文将深入探讨如何处理AJAX前进后退的问题,主要涉及`hash`技术的应用。 `hash`是URL中的井号(#)后面的部分,它在不重新加载整个页面的情况下可以改变,这对于实现AJAX应用的历史记录管理非常有用。浏览器会为每个...

    关于ajax支持浏览器后退前进的做法

    然而,传统的浏览器后退和前进按钮在AJAX应用中可能会导致用户体验下降,因为它们可能无法正确反映页面状态的变化。本文将详细介绍如何使用JavaScript来实现AJAX支持的浏览器后退和前进功能,以提供更流畅的导航体验...

    dhtmlHistory.js实现ajax前进、后退

    dhtmlHistory.js在Firefox下应用是没有问题的,但在ie下会有问题,主要原因是它不能脱离一个服务器环境,需要布置到一个真实的服务器下才能使用: 把 dhtmlHistory.js beat.html blank.html三个文件放到 C:\Program ...

    JS 获取链接(url)参数以及锚链接(anchor)结合富ajax的应用(ajax前进/后退的问题)

    现在,我们来看如何解决Ajax前进/后退问题。当使用Ajax加载新内容时,浏览器的历史记录不会自动更新,导致前进/后退功能失效。为此,可以使用`pushState`和`replaceState`方法来自定义历史记录: ```javascript // ...

    ajax 浏览器后退前进按钮功能实现

    然而,传统的Ajax请求可能会导致浏览器的后退和前进按钮失效,因为它们没有更新浏览器的历史记录。本篇将探讨如何在使用Ajax时正确处理浏览器的后退和前进功能。 首先,了解浏览器的后退和前进机制。当用户点击...

    基于Jquery.history解决ajax的前进后退问题

    本文主要给大家介绍基于Jquery.history解决ajax的前进后退问题,涉及到jquery前进后退相关方面的知识,本文内容经典,非常具有参考价值,特此把jquery前进后退相关知识分享在脚本之家网站供大家参考

    pushState、replaceState、onpopstate 实现Ajax页面的前进后退刷新

    传统的浏览器前进后退操作在Ajax加载的单页面应用中变得无效,因为浏览器的历史记录并未更新。为了解决这一问题,我们可以通过HTML5提供的history对象的pushState、replaceState方法和onpopstate事件来实现页面的...

    AJAX 网页保留浏览器前进后退等功能

    暂不讨论在某些页面内容大量更新的情况下是否该使用AJAX的问题,本文简单说一下保留浏览器前进、后退、刷新等功能。 这里假设一个有两个Tabs的页面,每个Tab中含有大量文字,可能还有图片。如果现在觉得Tab2的内容很...

    解决浏览器记住ajax请求并能前进和后退问题

    文章主要讨论了如何解决这个问题,即“让浏览器记住AJAX请求并能前进和后退”。这种方法的核心在于利用了HTML5 History API中的`pushState`方法和`replaceState`方法,以及改变URL的hash部分(即URL中的#后内容)来...

    通过history解决ajax不支持前进/后退/刷新的问题

    1. AJAX与浏览器前进后退的问题: AJAX技术(Asynchronous JavaScript and XML)允许网页动态地更新内容,而无需重新加载整个页面。这种技术极大地提高了用户体验。然而,传统的浏览器历史记录功能(前进和后退按钮...

    如何让浏览器支持jquery ajax load 前进、后退功能

    但在使用AJAX加载页面内容时,浏览器的前进和后退功能往往会被破坏。本例将介绍如何在使用jQuery进行AJAX内容加载时,让浏览器的前进和后退按钮能够正常使用。 首先需要了解的是,在传统页面跳转中,浏览器会保存...

    ajax无刷新页面切换,历史记录后退前进解决方案.docx

    然而,这也会带来一个问题,即使用Ajax操作后,浏览器的历史记录无法正确处理后退和前进操作。本文将详细介绍如何利用JavaScript中的`history`对象API解决这个问题。 `history`对象提供了`pushState()`和`...

    纯ajax

    3. 前进后退问题:Ajax请求不会改变浏览器历史记录,可能导致前进后退功能失效。 4. 用户体验问题:若网络连接不稳定,可能造成页面加载不完整。 总结,Ajax技术是现代Web开发中的重要工具,通过它可以构建更加交互...

    Ajax学习资料 Ajax

    3. **前进/后退按钮**:如果处理不当,用户可能无法正确使用浏览器的历史记录功能。 在实际应用中,为了简化Ajax的开发,我们可以使用jQuery、axios、fetch等库或API。例如,jQuery的$.ajax()或$.getJSON()方法提供...

    ajax与history

    本文将详细介绍如何利用这些技术解决AJAX页面的前进后退问题。 #### 二、AJAX的局限性 1. **前进后退功能失效**:由于AJAX请求不会导致整个页面的重载,因此浏览器不会将新的状态添加到历史记录中,这使得用户无法...

Global site tag (gtag.js) - Google Analytics