ajax后退解决方案

流氓兔玉宝宝

流氓兔玉宝宝

2016-02-19 10:19

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的ajax后退解决方案教程,一起来看看吧!超容易上手~
一、使用iframe,通过document.write产生历史
代码如下:

!DOCTYPE html
html
head
meta charset="utf-8"/
title0/title
/head
body
input type="button" value="加1" onclick="add()" /
div id="info" style="border:red 1px solid;width:200px;padding:10px;margin:5px;"0/div
/body
/html
script src="history-0.1.js"/script
script
var info = document.getElementById('info');
var i = 1;
function add() {
info.innerHTML = i;
document.title = i;
var data = {
param : i,
func : func
};
History.push(data);
i++;
}
History.push({param:0, func: func});
function func(i) {
info.innerHTML = i;
document.title = i;
}
/script

点击按钮后更新页面DOM(模拟ajax提交),会发现浏览器后退按钮可用了。点击后退,可返回到前一个状态。
这种方式缺点是只支持IE和Firefox。
ajax后退解决方案(二)
二、使用iframe,通过修改iframe.src产生历史
代码如下:

!DOCTYPE html
html
head
meta charset="utf-8" /
title0/title
/head
body
input type="button" value="加1" onclick="add()" /
div id="info" style="border:red 1px solid;width:200px;padding:10px;margin:5px;"0/div
/body
/html
script src="history-0.2.js"/script
script
var info = document.getElementById('info');
var i = 1;
function add() {
info.innerHTML = i;
document.title = i;
var data = {
param : i,
func : func
};
History.push(data);
i++;
}
History.push({param:0, func: func});
function func(i) {
info.innerHTML = i;
document.title = i;
}
/script

较上一篇多了个blank.html,是一个空html架子,没有JS逻辑代码,如下
代码如下:

!DOCTYPE HTML
html
head
titleblank.html/title
/head
body
/body
/html

每次ajax操作会往iframe.src的问号后附加一个数字以记录历史。点击后退按钮,iframe的onload事件中获取iframe的url,根据问号后的数字去取记录。
所有浏览器均支持该方式。缺点是如果主页面中存在其它iframe,且修改了其src。历史管理会混乱。
三、使用iframe,通过修改iframe.src产生历史,回调写在iframe对应的html页面中
代码如下:

!DOCTYPE html
html
head
meta charset="utf-8" /
title0/title
/head
body
input type="button" value="加1" onclick="add()" /
div id="info" style="border:red 1px solid;width:200px;padding:10px;"0/div
/body
/html
script src="history-0.3.js"/script
script
var info = document.getElementById('info');
var i = 1;
function add() {
var data = {
param : i,
func : func
};
History.push(data);
i++;
}
History.push({param:0, func: func});
function func(i) {
info.innerHTML = i;
document.title = i;
}
/script

与方案2相同也是使用iframe.src来产生历史,也需要一个单独的html页面(iframe)。不同的是回调逻辑不是写在iframe.onload中,而直接写在html页面中(上一篇则是空的html架子)。blank.html如下
代码如下:

!DOCTYPE HTML
html
head
titleblank.html/title
/head
body
script
var url= location.href;
if(url.indexOf('?')-1) {
var idx = url.substr(url.indexOf('?')+1);
parent.History.get(idx);
}
/script
/body
/html

和方案2一样所有浏览器均支持。
四、通过修改location.hash产生历史,hashchange事件处理后退
代码如下:

!DOCTYPE html
html
head
meta charset="utf-8" /
title0/title
/head
body
input type="button" value="加1" onclick="add()" /
div id="info" style="border:red 1px solid;width:200px;padding:10px;"0/div
/body
/html
script src="history-0.4.js"/script
script
var info = document.getElementById('info');
var i = 1;
function add() {
var data = {
param : i,
func : func
};
History.push(data);
i++;
}
History.push({param:0, func: func});
function func(i) {
info.innerHTML = i;
document.title = i;
}
/script

每次ajax操作去改变location.hash的值,每次修改后地址栏均会有所体现。在window.onhashchange中监听该事件。通过hash的值取对应的历史。
较iframe的好处是可以复制地址栏的url直接进入该历史记录,缺点是IE6/7不支持。
文中代码打包下载

相关:

http://msdn.microsoft.com/en-us/library/cc288209(v=vs.85).aspx

https://developer.mozilla.org/en/DOM/window.onhashchange

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-hashchange

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)
展开更多 50%)
分享

猜你喜欢

ajax后退解决方案

Web开发
ajax后退解决方案

ajax中文乱码解决方案

Web开发
ajax中文乱码解决方案

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

解决AJAX 跨域访问完整解决方案

Web开发
解决AJAX 跨域访问完整解决方案

ajax跨域访问的解决方案

Web开发
ajax跨域访问的解决方案

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

JQuery Ajax 跨域访问的解决方案

Web开发
JQuery Ajax 跨域访问的解决方案

ajax session过期问题的几个解决方案

Web开发
ajax session过期问题的几个解决方案

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

SqlServer 2005 T-SQL Query 学习笔记(3)

SqlServer 2005 T-SQL Query 学习笔记(3)

SqlServer 2005 T-SQL Query 学习笔记(4)

SqlServer 2005 T-SQL Query 学习笔记(4)
下拉加载更多内容 ↓