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 parseInt 函数分析(转)
Mar 21 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
Mar 14 Javascript
Jquery插件之打造自定义的select标签
Nov 30 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
Oct 11 Javascript
javascript实现json页面分页实例代码
Feb 20 Javascript
JS 获取浏览器和屏幕宽高等信息代码
Mar 31 Javascript
用户代理字符串userAgent可实现的四个识别
Sep 20 Javascript
js操作数组函数实例小结
Dec 10 Javascript
不使用script导入js文件的几种方法
Oct 27 Javascript
jQuery Ajax全解析
Feb 13 Javascript
node.js中cluster的使用教程
Jun 09 Javascript
Vue3不支持Filters过滤器的问题
Sep 24 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闭包(Closure)使用详解
2013/05/02 PHP
ThinkPHP控制器详解
2015/07/27 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
JS动画效果代码3
2008/04/03 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
Javascript实现跑马灯效果的简单实例
2016/05/31 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
Python实现的一个简单LRU cache
2014/09/26 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
python 读取.nii格式图像实例
2020/07/01 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
上海微创软件面试题
2012/06/14 面试题
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
检讨书模板大全
2015/05/07 职场文书
小学生读书笔记范文
2015/06/30 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL