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 相关文章推荐
加载jQuery后$冲突的解决办法
Jul 09 Javascript
js输出列表实现代码
Sep 12 Javascript
Javascript跨域请求的4种解决方式
Mar 17 Javascript
JavaScript Math.ceil() 函数使用介绍
Dec 11 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
Mar 24 Javascript
javascript中Date format(js日期格式化)方法小结
Dec 17 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
Oct 24 Javascript
Vue 自定义动态组件实例详解
Mar 28 Javascript
mpvue构建小程序的方法(步骤+地址)
May 22 Javascript
react国际化化插件react-i18n-auto使用详解
Mar 31 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
Oct 20 Javascript
javascript对象3个属性特征
Nov 17 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与已存在的Java应用程序集成
2006/10/09 PHP
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
Vue单页及多页应用全局配置404页面实践记录
2018/05/22 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
Python的SQLAlchemy框架使用入门
2015/04/29 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
python实现超级玛丽游戏
2020/03/18 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
建龙钢铁面试总结
2014/04/15 面试题
外贸英语毕业生自荐信
2013/11/14 职场文书
个人承诺书怎么写
2014/05/24 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
企业工会工作总结2015
2015/05/13 职场文书
工会经费申请报告
2015/05/15 职场文书
老兵退伍感言
2015/08/03 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle
详解Vue的sync修饰符
2021/05/15 Vue.js