【转】实现AJAX下的浏览器 前进按钮/后退按钮,详解
时间:2010-08-23 来源:chyingp
本文转自:http://hi.baidu.com/my534/blog/item/45c6bdcadf628a82c81768e3.html
文件下载
下载本文所用例子
在AJAX技术如此火爆的今天,关于AJAX的程序破坏浏览器的“前进/后退”的问题一直像只苍蝇一样困扰着许多AJAX的初学者,当你去百度或是 google中搜索相关信息的时候,你会发现讨论此问题的文章很多,但是大多都是只给了个解决思路,或是长篇大论的深刻研究,很难找到实际的相关解决方案 的例子,于是我有了写这篇文章的想法,并提供一个小例子下载,希望对喜欢AJAX技术的同仁们有所帮助!
上一篇文章的例子中我们看到了每次点击按纽后数字的变化都被浏览器准确记录,并点击浏览器上的“前进/后退”按纽可查看之前每次点击后的数字。本篇文章将向大家详细说明实现的原理。 var h_list=new Array(10);//声明用来存储页面历史信息的数组(最大记录10次历史操作) var h_index=0;//声明用来指定当前浏览历史记录的指针 //保存历史记录方法 function saveHistory() { if(document.getElementById('hisStoryFrame')) { if(h_index==9) { h_index=0; }else{ h_index++; } h_list[h_index]=document.getElementById("info").innerHTML; document.getElementById('hisStoryFrame').src='history.htm?'+h_index; } } //读取历史记录的方法 function getHisStory(curIndex) { if(curIndex!=h_index) { if(h_list[curIndex]) { h_index=curIndex; document.getElementById("info").innerHTML=h_list[curIndex]; } } } //按纽点击后运行的方法, function test() { //用于改变页面信息,你可将其换为ajax的操作 document.getElementById('info').innerHTML=(parseInt(document.getElementById('info').innerHTML)+1); //之前的操作成功后记录历史 saveHistory(); } </script>
h_list[0]=document.getElementById("info").innerHTML; </script> 此段程序的意思是将页面刚打开时页面的信息存入数组中的第0处,这样子就能保证在用户第一次点击后就能按“后退”按纽回到页面第一次打开的状态。 页面隐藏的iframe在父页面中要如下声明: 程序代码 <iframe id="hisStoryFrame" src="history.htm?0" height="0px" frameborder="no"></iframe> height="0px" frameborder="no" 这两个属性保证了iframe在页面中不可见,而src的属性设为"history.htm?0",注意"?0"将页 面初始参数便定为0,这样子在根据"?"后的参数读取历史时就能读取到最初页面打开时的状态。 iframe指向的页面history.htm中的代码则很简单: 程序代码 <script> var url=window.location.href; if(url.indexOf('?')>-1) { parent.getHisStory(url.substr(url.indexOf('?')+1)); document.write(window.location.search.substr(1)); } </script> 只是每次读取页面时根据URL中的"?"后的数字去调用父页面中的getHisStory方法,恢复在数组中相应的历史页面信息。 这就是实现整个功能的全过程及代码,讲得比较粗糙,但代码还是很实用的,我的blog系统(http://www.zj-blog.com/)大量采用的AJAX的方式读取信息,但还是可以使用浏览器的“前进/后退”功能,其背后的原理也就是这个例子中的代码,大家如果看文章不是太明白的话可以下载本文使用的例子去研究。希望大家以后做的AJAX程序都能实现浏览器的“前进/后退”功能! 文件下载 |