ajax浏览器后退 iframe,ajax后退解决方案「终于解决」

ajax浏览器后退 iframe,ajax后退解决方案「终于解决」一、使用iframe,通过document.write产生历史00varinfo=document.getElementById(‘info’);vari=1;functionadd(){info.innerHTML=i;document.title=i;vardata={param:i,func:func};History.push(data);i++;}H…

大家好,欢迎来到IT知识分享网。

一、使用iframe,通过document.write产生历史

0

0

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;

}

点击按钮后更新页面DOM(模拟ajax提交),会发现浏览器后退按钮可用了。点击后退,可返回到前一个状态。

这种方式缺点是只支持IE和Firefox。

ajax后退解决方案(二)

二、使用iframe,通过修改iframe.src产生历史

0

0

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;

}

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

blank.html

每次ajax操作会往iframe.src的问号后附加一个数字以记录历史。点击后退按钮,iframe的onload事件中获取iframe的url,根据问号后的数字去取记录。

所有浏览器均支持该方式。缺点是如果主页面中存在其它iframe,且修改了其src。历史管理会混乱。

三、使用iframe,通过修改iframe.src产生历史,回调写在iframe对应的html页面中

0

0

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;

}

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

blank.html

var url= location.href;

if(url.indexOf(‘?’)>-1) {

var idx = url.substr(url.indexOf(‘?’)+1);

parent.History.get(idx);

}

和方案2一样所有浏览器均支持。

四、通过修改location.hash产生历史,hashchange事件处理后退

0

0

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;

}

每次ajax操作去改变location.hash的值,每次修改后地址栏均会有所体现。在window.onhashchange中监听该事件。通过hash的值取对应的历史。

较iframe的好处是可以复制地址栏的url直接进入该历史记录,缺点是IE6/7不支持。

文中代码打包下载

相关:

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/26016.html

(0)
上一篇 2023-01-05 22:50
下一篇 2023-05-14 11:00

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信