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


Posted in Javascript onFebruary 12, 2011

在一些AJAX被大量使用的页面,有时都不太敢刷新,因为刷新以后可能看到的是和原来有很大不同的页面。暂不讨论在某些页面内容大量更新的情况下是否该使用AJAX的问题,本文简单说一下保留浏览器前进、后退、刷新等功能。
这里假设一个有两个Tabs的页面,每个Tab中含有大量文字,可能还有图片。如果现在觉得Tab2的内容很好,把它加入收藏夹或发送给朋友。下次通过收藏夹打开或者朋友点开这个链接的时候很有可能看到的是Tab1的内容,然后需要鼠标再次点击Tab2才看到想要看的内容。如果页面逻辑更为复杂,则可能要进行多步操作才能回到希望看的内容,这样的体验不太好。
要使刷新、加入收藏夹等功能正常使用,需要让当前的操作在URI上有所体现。但是改变URI的同时又不能引起页面的刷新,因此可以通过改变URI中的片段(fragment)来实现。例如,点击Tab1后将URI改为http://www.example.com/example.html#tab1,点击Tab2则将URI改为http://www.example.com/example.html#tab2。

function ShowTab1() { 
$("#tab2").hide(); 
$("#tab1").show(); 
window.location.hash = "#tab1"; 
}; 
function ShowTab2() { 
$("#tab1").hide(); 
$("#tab2").show(); 
window.location.hash = "#tab2"; 
};

这样做已经使得URI产生了变化,但是无论通过http://www.example.com/example.html#tab1还是http://www.example.com/example.html#tab2访问页面都是显示Tab1的内容,所以还需要在页面载入时读取#后的内容。
$(document).ready(ShowTab()); 
function ShowTab() { 
if (window.location.hash == "#tab2") 
ShowTab2(); 
else 
ShowTab1(); 
}

这样,刷新和加入收藏夹等功能都已经可以使用了,不过前进和后退还是会有麻烦。虽然这两个按钮已经变得可用,但是点击时网页的内容并没有发生变化。我们需要用到body的onhashchange事件。onhashchange事件并不是所有浏览器都支持的,如果要使不支持该事件的浏览器也检测#后内容的变化,可能需要写一个函数定期检测window.location.hash的变化或者自己实现onhashchange事件。
示例代码打包下载 (Visual Studio 2010)
Javascript 相关文章推荐
javascript实现的使用方向键控制光标在table单元格中切换
Nov 17 Javascript
js拦截alert对话框另类应用
Jan 16 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
在JavaScript应用中实现延迟加载的方法
Jun 25 Javascript
AngularJS入门之动画
Jul 27 Javascript
Vue.js每天必学之构造器与生命周期
Sep 05 Javascript
JavaScript实现星星等级评价功能
Mar 22 Javascript
Angular4学习之Angular CLI的安装与使用教程
Jan 04 Javascript
vue cli构建的项目中请求代理与项目打包问题
Feb 26 Javascript
浅析node应用的timing-attack安全漏洞
Feb 28 Javascript
微信小程序实现滑动操作代码
Apr 23 Javascript
Openlayers绘制地图标注
Sep 28 Javascript
一些主流JS框架中DOMReady事件的实现小结
Feb 12 #Javascript
javascript中删除指定数组中指定的元素的代码
Feb 12 #Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
Feb 12 #Javascript
编写可维护面向对象的JavaScript代码[翻译]
Feb 12 #Javascript
URL地址中的#符号使用说明
Feb 12 #Javascript
基于Jquery制作的幻灯片图集效果打包下载
Feb 12 #Javascript
基于jquery的jqDnR拖拽溢出的修改
Feb 12 #Javascript
You might like
一个简单计数器的源代码
2006/10/09 PHP
php中require和require_once的区别说明
2014/02/27 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
js实现日期级联效果
2014/01/23 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
javascript基本常用排序算法解析
2017/09/27 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
浅析Python 条件控制语句
2020/07/15 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
国庆节文艺活动方案
2014/02/03 职场文书
企业活动策划方案
2014/06/02 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
政风行风评议工作总结
2014/10/21 职场文书
销售员自我评价
2015/03/11 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript