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中的style.display属性操作
Mar 27 Javascript
node.js中的fs.createReadStream方法使用说明
Dec 17 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
Aug 05 Javascript
javascript实现五星评分功能
Nov 10 Javascript
jQuery实现图片文字淡入淡出效果
Dec 21 Javascript
JS原型对象的创建方法详解
Jun 16 Javascript
js调用屏幕宽度的简单方法
Nov 14 Javascript
微信小程序自定义组件
Aug 16 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
Sep 19 Javascript
layui中layer前端组件实现图片显示功能的方法分析
Oct 13 Javascript
React Native中NavigatorIOS组件的简单使用详解
Jan 27 Javascript
vue框架搭建之axios使用教程
Jul 11 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_xmlhttp 乱码问题解决方法
2009/08/07 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
php四种定界符详解
2017/02/16 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
(function($){...})(jQuery)的意思
2010/07/22 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
Python转换HTML到Text纯文本的方法
2015/01/15 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
Python中求对数方法总结
2020/03/10 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
python 实现性别识别
2020/11/21 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
优秀团员自我评价范文
2014/04/23 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
委托书格式
2014/08/01 职场文书
组工干部演讲稿
2014/09/02 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
高一化学教学反思
2016/02/22 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL