ajax 浏览器后退,全站Ajax浏览器后退方法

全站Ajax后退有两种方法,浏览器后退按钮加入历史链接。其中一种是常规的Ajax后退,这种后退是带有ajax效果的,要重新请求历史链接页面。另一种是将历史数据保存,后退时取出缓存的数据即可。后者比前者效率要高,所以速度也快,就跟平常无ajax的页面后退一样。

下面就是介绍这种方法,与此同时我们还要解决Chrome浏览器首次载入网站时出现的AJAX效果重载(reload)的现象。

我们需要两个函数,以及对其中一个函数进行全局变量初始化,要添加进入js的主要代码如下:

// 初始化载入-全局变量

$(document).ready(function(){

bind_popstate_once(); // 页面载入初始一次(解决Chrome首次载入出现ajax效果的问题)

});

//函数:更新浏览器历史缓存(用于浏览器后退)

function update_page_historyState(){

history.replaceState( // 刷新历史点保存的数据,给state填入正确的内容

{    url: window.document.location.href,

title: window.document.title,

html: $('#left').prop('outerHTML'), // 抓取主体部分outerHTML用于呈现新的主体。也可以用这句 html: $(document).find('#left').html()

}, window.document.title, document.location.href);

}

//函数:页面载入初始一次,解决Chrome浏览器初始载入时产生ajax效果的问题

function bind_popstate_once(){

window.addEventListener( 'popstate', function( e ){  //监听浏览器后退事件

if( e.state ){

document.title = e.state.title;

$('#left').html( e.state.html ); //也可以用replaceWith ,最后这个html就是上面替换State后里面的html值

$.featureList($("#sl-posts li a"),$("#output li"), {start_item:0});// 重载幻灯片-1

//返回锚点(顶部)

//var anchor = location.hash.indexOf('#'); // 用indexOf检查location.href中是否含有'#'号,如果没有则返回值为-1

//if (anchor == -1) { // 若不含#号

//    body_am(0); // 直接返回顶部

//} else {

//    anchor = window.location.hash.substring(anchor + 1);

//    body_am(anchor);

//}

}

});

}

接下来是ajax事件内success: function(data){ ... }内利用到html5的API —— pushState提交链接到历史中,一般添加到success的最后:

if (msg != 'back' && msg != 'comment') { //  不为后退 也 不为评论回复时

var state = { // 设置state参数

url: paraUrl,

title: $(data).filter("title").text(),

html: $(data).find("#left").html(),

};

// 将当前url和历史url添加到浏览器当中,用于后退。里面三个值分别是: state, title, url

window.history.pushState(state, $(data).filter("title").text(), historyUrl);

}

(若少了这个或window.history.pushState的三个值有误,有可能无法后退或无法前进)

上面是两个函数,update_page_historyState()函数用在ajax加载时,因为它是更新历史页面缓存的,要放在pushState事件之前,这样也可以加入 beforesend 里面。 以上基本上就全部OK了,当然,返回顶部事件随个人喜好加,上面注释位置里已经有返回锚点了。

2014-10-14补充:值得注意的是,如果#left里面加载有其他js的插件效果,比如幻灯片,那么就需要在bind_popstate_once()函数里面重载一遍,和ajax的重载一个道理。

2014-10-15补充:点击侧栏的评论切换页面后发现点击其他链接时地址栏不会变,只有页面改变,这是由于返回锚点函数引起的,检查链接中带有#号的问题,将返回锚点放在complete里面即可,也就是window.history.pushState的后面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值