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学习笔记之toArray()
Jun 09 Javascript
javascript实现回到顶部特效
May 06 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
Jan 27 Javascript
jQuery导航条固定定位效果实例代码
May 26 jQuery
jQuery修改DOM结构_动力节点Java学院整理
Jul 05 jQuery
基于zepto.js实现登录界面
Oct 09 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
Dec 18 Javascript
简单的Vue异步组件实例Demo
Dec 27 Javascript
小试SVG之新手小白入门教程
Jan 08 Javascript
JS为什么说async/await是generator的语法糖详解
Jul 11 Javascript
Vue 刷新当前路由的实现代码
Sep 26 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
Nov 13 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:风雨欲来 路在何方?
2006/10/09 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
JavaScript 的方法重载效果
2009/08/07 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
将Python代码打包为jar软件的简单方法
2015/08/04 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
Python实现的简单计算器功能详解
2018/08/25 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
pygame实现弹球游戏
2020/04/14 Python
pandas按条件筛选数据的实现
2021/02/20 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
小学生国庆演讲稿
2014/09/05 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
植树节新闻稿
2015/07/17 职场文书
导游词之杭州西湖
2019/09/19 职场文书
导游词之任弼时故居
2020/01/07 职场文书