从此链接点击后,我找到了恢复上一页的方法。 JQuery & history.js back button not working
但是当我在ajax目标页面上重新加载时,初始状态再次设置初始状态,我无法单击返回按钮一次返回。
分步测试:
如何防止history.js双击返回? (它应该点击一次。)
如果您不了解其工作原理或希望查看代码,请下载我的网页&码。
http://www.megafileupload.com/en/file/513749/ajax-history-js-zip.html
查看页面的某些部分&代码:看看这个JSFiddle。
function ajaxPushUrl(thisobj) {
if ($('body').find('.ajax-content-column').length != 0) {
// current page has certain class.
var thisurl = thisobj.attr('href');
History.pushState({ajaxContentColumn:$('.ajax-content-column').html()}, thisobj.text(), thisurl);
return false;
}
}
function updatePage(data, url) {
if ($('body').find('.ajax-content-column').length == 0) {
// has NO certain class, use normal page request.
window.location.href=url;
return true;
}
if (url.toLowerCase().indexOf('page') >= 0) {
$.ajax({
url: url,
type: 'GET',
dataType: 'html',
success: function(data) {
$('.ajax-content-column').html(data);
return false;
}
});
} else {
$('.ajax-content-column').html(data.ajaxContentColumn);
}
}
$(function() {
if ($('body').find('.ajax-content-column').length != 0) {
// current page has certain class.
if (History.enabled) {
State = History.getState();
// from pushState below, when you are on ajax requested page and reload page, it must double back click to go back.
History.pushState({ajaxContentColumn:$('.ajax-content-column').html()}, $('title').text(), State.url);
}
// on state change, call update page js function.
History.Adapter.bind(window,'statechange',function(){
var State = History.getState();
updatePage(State.data, State.url);
});
}
});
答案 0 :(得分:2)
我用两种方法解决问题:
将部分代码修改为
$(function() {
History.Adapter.bind(window,'statechange',function(){
var State = History.getState();
updatePage(State.data, State.url);
});
});
而不是
$(function() {
if ($('body').find('.ajax-content-column').length != 0) {
// current page has certain class.
if (History.enabled) {
State = History.getState();
// from pushState below, when you are on ajax requested page and reload page, it must double back click to go back.
History.pushState({ajaxContentColumn:$('.ajax-content-column').html()}, $('title').text(), State.url);
}
// on state change, call update page js function.
History.Adapter.bind(window,'statechange',function(){
var State = History.getState();
updatePage(State.data, State.url);
});
}
});
更新 :更新您的 ajaxPushUrl 功能,仅在我们不在同一页面时更新。
function ajaxPushUrl(thisobj) {
if ($('body').find('.ajax-content-column').length != 0) {
// current page has certain class.
var thisurl = thisobj.attr('href');
if(window.location.href.split('/').pop() != thisurl) { //update only we are not on same page
History.pushState({ajaxContentColumn:$('.ajax-content-column').html()}, thisobj.text(), thisurl);
}
return false;
}
}
在此方法中,当您单击ajax链接或浏览历史记录时,将调用ajax请求。
$(function() {
var clicked = false;
function updatePage(data, url) {
if ($('body').find('.ajax-content-column').length == 0) {
// has NO certain class, use normal page request.
window.location.href=url;
}
if(typeof data.ajaxContentColumn != 'undefined') {
$('.ajax-content-column').html(data.ajaxContentColumn);
return false;
}
fetchContent(url);
}
function fetchContent(url) {
$.ajax({
url: url,
type: 'GET',
dataType: 'html',
success: function (data) {
$('.ajax-content-column').html(data);
clicked = true;
History.pushState({ajaxContentColumn: $('.ajax-content-column').html()}, '', url);
}
});
}
$(".ajax-link").click(function(e) {
if($('body').find('.ajax-content-column').length == 0) {
return true;
}
e.preventDefault();
var url = $(this).attr('href');
fetchContent(url);
});
History.Adapter.bind(window,'statechange',function(){
if(clicked) {
clicked = false;
return;
}
var State = History.getState();
updatePage(State.data, State.url);
});
});
并从您的链接中删除 onclick=\"return ajaxPushUrl($(this));\"
。
在这种方法中,您可以在浏览历史记录时保存一些ajax请求。从浏览器缓存加载的内容。
享受!!