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 相关文章推荐
js数组依据下标删除元素
Apr 14 Javascript
JQUERY简单按钮轮换选中效果实现方法
May 07 Javascript
javascript实现dom元素可拖动
Mar 21 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
Jun 08 Javascript
老生常谈combobox和combotree模糊查询
Apr 17 Javascript
jquery单击文字或图片内容放大并居中显示
Jun 23 jQuery
vue环境搭建简单教程
Nov 07 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
Feb 09 Javascript
关于node-bindings无法在Electron中使用的解决办法
Dec 18 Javascript
微信小程序模板消息推送的两种实现方式
Aug 27 Javascript
JavaScript实现表单验证功能
Dec 09 Javascript
React Native项目框架搭建的一些心得体会
May 28 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,不用COM,生成excel文件
2006/10/09 PHP
扩展你的 PHP 之入门篇
2006/12/04 PHP
php md5下16位和32位的实现代码
2008/04/09 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
php实现网页端验证码功能
2017/07/11 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
javascript操作JSON的要领总结
2012/12/09 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
node.js事件轮询机制原理知识点
2019/12/22 Javascript
Python中的super()方法使用简介
2015/08/14 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
电子商务自荐书范文
2014/01/04 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
酒店端午节促销方案
2014/02/18 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
车间主任岗位职责
2015/02/03 职场文书
盗窃案辩护词
2015/05/21 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript