• AJAX保留浏览历史的解决方案——hashchange()


    在ajax请求中,不能更新地址栏,地址栏上的“前进”和“后退”按钮就失效了,带来了另外一种糟糕的用户体验。

    解决方案如下:

    方案一:使用window. Onhashchange 事件

    如下面Html片段,点击不同的连接,在mainPanel中加载不同的页面:

    首先写一个方法来获取当前url中指定key的hash值,如下:

    
    

    使用onhashchange事件触发ajax请求:

    
    

    到这里工作已经完成了80%,为什么是80%呢,这里面还有一个问题:

    当你直接在浏览器(新开的标签页)的地址栏里输入这样的地址:http://localhost:3859/home/index#page=3 或者通过QQ发给你的好友,看到的并不是如你所想的应该是page=3的内容,而是http://localhost:3859/home/index 的内容。原因很简单——页面加载的时候不会触发onhashchange事件。

    所以我们要在上面的代码追加一行:

    $(loadPanel);
    //或者    
    $(function(){ $(window).trigger("hashchange"); });
    

    onhashchange 事件location.hash发生改变的时候触发,可以很好解决AJAX刷新后退/前进键失效的问题,是一个新的事件,

    目前chrome ,firefox,Opera,  Safari,IE8及以上版本浏览器都兼容。

    其实对于那些死抱着IE6,IE7 不放的用户,咱也没必要给他们提供这样的用户体验。

    方案二:使用jQuery.History.js

    对于要兼容IE6、IE7的情况,笔者一直使用jquery.history.js 这个插件(https://github.com/tkyk/jquery-history-plugin)。

    这个插件它会去判断浏览器是否支持onhashchange事件,如果不支持,就定时(每个100毫秒)循环判断hash有没有变化,从而执行相应处理。

    如:

    
    

    另外,这个插件已经不再继续更新维护了。

    方案三:jquery.ba-hashchange.js

    jquery.ba-hashchange.js(http://benalman.com/projects/jquery-hashchange-plugin/)

    这个插件的实现原理和jquery.history.js 完全一样。循环间隔为50毫秒。

    它overwrite 了window.hashchange事件,使其能够兼容全部浏览器。

    使用如下:

  • 相关阅读:
    Kali上安装VMwareplayerfull 16
    安全漏洞概述
    BlueZ Linux上的bluetoth
    以太帧、ip数据包、tcp数据报长度究竟怎么算?
    office misc
    检测车道线——5.霍夫变换 Hough Transform
    Kafka 总体调优
    MySQL 联合索引 和 单列索引 的区别
    odps数据库(一)
    AIRPWRA\AIRPWRB\AIRPWRC
  • 原文地址:https://www.cnblogs.com/3body/p/5416956.html
Copyright © 2020-2023  润新知