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 相关文章推荐
extjs grid设置某列背景颜色和字体颜色的方法
Sep 03 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
Sep 20 Javascript
利用javascript实现web页面中指定区域打印
Oct 30 Javascript
jquery增加时编辑jqGrid(实例代码)
Nov 08 Javascript
js数组方法扩展实现数组统计函数
Apr 09 Javascript
一些老手都不一定知道的JavaScript技巧
May 06 Javascript
详解js图片轮播效果实现原理
Dec 17 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
May 19 Javascript
jQuery为动态生成的select元素添加事件的方法
Aug 29 Javascript
微信小程序实战之运维小项目
Jan 17 Javascript
详解EasyUi控件中的Datagrid
Aug 23 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
Dec 07 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
深入php var_dump()函数的详解
2013/06/05 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
javascript高亮效果的二种实现方法
2008/09/14 Javascript
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
js读取cookie方法总结
2014/10/31 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
Python代码的打包与发布详解
2014/07/30 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
Python实现定时任务
2017/02/08 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
护士思想汇报
2014/01/12 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
2014年小学教师工作总结
2014/11/10 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
经销商会议开幕词
2016/03/04 职场文书