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获取GridView中用户点击控件的行号,列号
Apr 14 Javascript
javascript 二分法(数组array)
Apr 24 Javascript
在Javascript中 声明时用"var"与不用"var"的区别
Apr 15 Javascript
改变状态栏文字的js代码
Jun 13 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
Vue.js双向绑定操作技巧(初级入门)
Dec 27 Javascript
vue.js 初体验之Chrome 插件开发实录
May 13 Javascript
vue下跨域设置的相关介绍
Aug 26 Javascript
解决vue项目打包后提示图片文件路径错误的问题
Jul 04 Javascript
Vuex 使用及简单实例(计数器)
Aug 29 Javascript
微信小程序渲染性能调优小结
Jul 30 Javascript
iview form清除校验状态的实现
Sep 19 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
使用PHP生成二维码的两种方法(带logo图像)
2014/03/14 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
PHP7新特性
2021/03/09 PHP
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
用Python写冒泡排序代码
2016/04/12 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
django页面跳转问题及注意事项
2019/07/18 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
装饰公司活动策划方案
2014/08/23 职场文书
法制演讲稿
2014/09/10 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
党员转正申请报告
2015/05/15 职场文书
HAM-2000摩机图
2021/04/22 无线电
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记