pjax 历史管理 jQuery.History.js
更新
http://www.bootcdn.cn/jquery.pjax/
简介
pjax是一个jQuery插件,使用ajax和pushState技术提供快速的浏览体验与真正的永久链接、网页标题、以及浏览器的后退前进按钮操作。
pjax通过抓取HTML从您的服务器通过Ajax和更换容器页面上的HTML内容会与Ajax。然后更新无需重新加载你的网页的布局或任何资源使用pushstate浏览器的当前URL(JS,CSS),提供了一个快速的外观,全页面加载。但它确实就是Ajax和pushstate。
点击这里查看pushState的浏览器支持情况。
概述
pjax不是全自动的。您需要设置和指定一个包含在您的页面上的元素,当您浏览您的网站时将被替换。
// ------------------------------------------------------------------------------------------------
在ajax请求中,不能更新地址栏,地址栏上的“前进”和“后退”按钮就失效了,带来了另外一种糟糕的用户体验。
解决方案如下:
方案一:使用window. Onhashchange 事件
如下面Html片段,点击不同的连接,在mainPanel中加载不同的页面:
解决方案如下:
<ul class="menu"><li><a href="/home/index#page=1">page1</a></li><li><a href="/home/index#page=2">page2</a></li><li><a href="/home/index#page=3">page3</a></li> </ul><div id="mainPanel"> </div>
首先写一个方法来获取当前url中指定key的hash值,如下:
<script type="text/javascript">//获取指定key的hash值function getHash(key, url) {var hash;if (!!url) {hash = url.replace(/^.*?[#](.+?)(?:\?.+)?$/, "$1");hash = (hash == url) ? "" : hash;} else {hash = self.location.hash;}hash = "" + hash;hash = hash.replace(/^[?#]/, '');hash = "&" + hash;var val = hash.match(new RegExp("[\&]" + key + "=([^\&]+)", "i"));if (val == null || val.length < 1) {return null;} else {return decodeURIComponent(val[1]);}}</script>
到这里工作已经完成了80%,为什么是80%呢,这里面还有一个问题:
当你直接在浏览器(新开的标签页)的地址栏里输入这样的地址:http://localhost:3859/home/index#page=3 或者通过QQ发给你的好友,看到的并不是如你所想的应该是page=3的内容,而是http://localhost:3859/home/index 的内容。原因很简单——页面加载的时候不会触发onhashchange事件。
所以我们要在上面的代码追加一行:
function loadPanel() {var page = getHash("page");if (page == 1) {$("#mainPanel").load("/home/page1");}if (page == 2) {$("#mainPanel").load("/home/page2");}if (page == 3) {$("#mainPanel").load("/home/page3");}}$(window).bind("hashchange", loadPanel);</script> $(loadPanel); //或者 $(function(){ $(window).trigger("hashchange"); });
onhashchange 事件location.hash发生改变的时候触发,可以很好解决AJAX刷新后退/前进键失效的问题,是一个新的事件,
目前chrome ,firefox,Opera, Safari,IE8及以上版本浏览器都兼容。
其实对于那些死抱着IE6,IE7 不放的用户,咱也没必要给他们提供这样的用户体验。
方案二:使用jQuery.History.js
对于要兼容IE6、IE7的情况,笔者一直使用jquery.history.js 这个插件(http://plugins.jquery.com/history/)。
这个插件它会去判断浏览器是否支持onhashchange事件,如果不支持,就定时(每个100毫秒)循环判断hash有没有变化,从而执行相应处理。
如:
<script src="/Scripts/jquery.history.js" type="text/javascript"></script> <script type="text/javascript">$(function () {$.history.init(function (hash) {var page = getHash("page");if (page == 1) {$("#mainPanel").load("/home/page1");}if (page == 2) {$("#mainPanel").load("/home/page2");}if (page == 3) {$("#mainPanel").load("/home/page3");}});}); </script>
另外,这个插件已经不再继续更新维护了。
方案三:jquery.ba-hashchange.js
jquery.ba-hashchange.js(http://benalman.com/projects/jquery-hashchange-plugin/)
这个插件的实现原理和jquery.history.js 完全一样。循环间隔为50毫秒。
它overwrite 了window.hashchange事件,使其能够兼容全部浏览器。
使用如下:
<script src="/Scripts/jquery.ba-hashchange.js" type="text/javascript"></script> <script type="text/javascript">$(window).hashchange(function () {var page = getHash("page");if (page == 1) {$("#mainPanel").load("/home/page1");}if (page == 2) {$("#mainPanel").load("/home/page2");}if (page == 3) {$("#mainPanel").load("/home/page3");}});$(window).hashchange(); </script>
Ajax保留浏览器历史的解决方案
转载于:https://www.cnblogs.com/cssfirefly/p/5175329.html
pjax 历史管理 jQuery.History.js相关推荐
- javascript:jquery.history.js使用方法
javascript:jquery.history.js使用方法 step1:download jquery.history.js step2:create a test page as follow ...
- pjax php demo,jQuery pjax 应用简单示例
pjax 是一个jQuery插件,它使用 ajax 和 pushState 来实现快速的浏览体验,包括真正的固定链接,页面标题和工作返回按钮. ajax缺点是破坏了浏览器的前进后退,因为ajax的请求 ...
- html5历史纪录管理,HTML 5 新增方法以及历史管理
@(HTML5)[HTML5 新增方法] [TOC] 十四. HTML 5 新增方法以及历史管理 新增的获取元素的方法 静态获取的方法: document.querySelector() 选择单个元素 ...
- php pjax案例,基于jquery.pjax实现Pjax效果详解
pjax是对ajax + pushState的封装,ajax大家应该都明白,就是使用xmlhttprequest对象与服务端进行交换数据,pushState是一个可以操作history的api.说白了 ...
- jquery.validate.js的使用小结
2019独角兽企业重金招聘Python工程师标准>>> jquery很好的网站:http://www.runoob.com/jquery/jquery-plugin-validate ...
- 商城后台管理系统(EasyUI、jQuery、js、Ajax、Servlet、jsp、mysql、EL,导出订单等)
文章目录 前言 用到的技术 实现的功能 包文件 后台 前端 页面效果 登录 设计思路 主页面 管理员管理的界面 界面 添加 修改 删除 查询 订单管理 导出 技术展望 尾语 前言 只剩十几天就英语四六 ...
- Vuex 数据流管理及Vue.js 服务端渲染(SSR)
Vuex 数据流管理及Vue.js 服务端渲染(SSR)项目见:https://github.com/smallSix6/fed-e-task-liuhuijun/tree/master/fed-e- ...
- matlab 历史命令,Shell history详解:查看历史命令
Bash 有完善的历史命令,这对于简化管理操作.排查系统错误都有重要的作用,而且使用简单方便,建议大家多使用历史命令.系统保存的历史命令可以使用 history 命令查询,命令格式如下: [root@ ...
- 三款改进 Chrome 浏览历史管理的扩展程序
Google Chrome 提供了非常简便的查看过去访问网站历史的功能,默认情况下这些历史记录按照打开顺序倒序排列.但是如果要在历史记录中搜索先前访问过的网站,就比较困难了.Chrome的历史功能还缺 ...
最新文章
- mysql图形化及命令行操作用户权限
- LeetCode之All Possible Full Binary Trees(Kotlin)
- 第一次用写一个3d轮播
- XML解析的三种方式(dom,sax,dom4j)
- Unity罗技方向盘接入
- mysql注册slave_创建slave库?spm=a2c4e.11155472的搜索结果-阿里云开发者社区
- CVPR2021 Oral|只用静态图,实时渲染出丝滑3D效果
- video 全屏显示
- java读取图片成rgb二维数组
- 十年 IT 老兵告诉你如何快速构建可直接落地、基于开源的低成本架构!
- mpeg4的解码演示程序
- JAVA退房计算价格怎么写,JAVA宾馆客房管理系统报告.doc
- 优化三维空间定位法及C语言快捷实现
- vue 前端导出xlsx文件
- 2019年华为JAVA面试题系列
- Git GUI中文乱码解决问题
- AJAX框架眼镜穿搭夏天,30度的夏天,男生应该如何穿搭?看这9种时尚组合!
- 线性规划(一):基本概念
- Android群英传笔记——摘要,概述,新的出发点,温故而知新,可以为师矣!
- win10的mysql密码忘记了怎么办_win10忘记mysql密码怎么办