编辑 3:这个jsFiddle与插件一起使用,我几乎拥有它。
编辑2:我做了一个小提琴。我无法让插件在那里工作,但也许更容易分析。
在我正在构建的网页中,文章(帖子)和新页面是通过 Ajax 加载的。在加载新的 Ajax 内容的同时,地址栏会发生变化(使用jQuery 地址插件)。
所以一个正常的导航会是这样的:
//page2 /page3 /article7 /page3 /page4
请注意,在此导航中,没有按下浏览器按钮,当退出文章 7 时,网站会返回到其先前的 url,在这种情况下是page3 。
该插件不会检测用户何时按下后退或前进按钮。我设法找出一种方法来了解用户何时按下后退或前进按钮:
每次添加新内容并更改地址时,我都会将新地址存储在一个数组中。如果用户按下后退或前进按钮,我会这样分析:
if (new_url == penultimate_value_in_array) => 按下后退按钮(从数组中删除最后一个值)
else => 按下前进按钮(向数组添加新值)
这适用于这种导航:
//page2 /page3 /page4
就我而言,它非常适合“后退”按钮。但是,如果用户从 /article7 到 /page3 按下 Forward,该函数会将其读取为 Back。这是一个例子来理解我的意思:
用户在 /page4 并按 Back -> new_page=/page3 等于 penultimate_page_in_array(/page3) => BACK
//page2 /page3 /article7 /page3 /page4
用户在 /page3 并按 Back -> new_page=/article7 等于 penultimate_page_in_array(/article7) => BACK
//page2 /page3 /article7 /page3
用户在 /article7 并按 Back -> new_page=/page3 等于 penultimate_page_in_array(/page3) => BACK
//page2 /page3 /article7
用户在 /page3 并按 Back -> new_page=/page2 等于 penultimate_page_in_array(/page2) => BACK
//第2页/第3页
用户在 /page2 并按下 Forward -> new_page=/page3 不等于 penultimate_page_in_array(/) => FORWARD
/ /第2页
用户在 /page3 并按下 Forward -> new_page=/article7 不等于 penultimate_page_in_array(/page2) => FORWARD
//第2页/第3页
用户在 /article7 并按下 Forward -> new_page=/page3 等于 penultimate_page_in_array(/page3) => BACK (这里的值应该是 FORWARD)
//page2 /page3 /article7
我如何引入另一个可以确定 False Back 应该是 Forward 的语句?
编辑:
这是我正在使用的代码,我不确定它是否有助于解决问题,但这里是:
var site_url = 'www.mysite.com',
last_visited_url = '',
just_visited_url = $.address.baseURL().replace(site_url,''),
visited_pages_array = [just_visited_url],
page_number = '';
访问新页面时:ajax调用,然后:
last_visited_url = just_visited_url;
page_number = $('a.next_page_link').attr('href').replace(site_url,''); // /page3 for example
$.address.state(site_url).value(page_number);
just_visited_url = page_number;
visited_pages_array.push(just_visited_url);
加载文章时:ajax调用,然后:
article_url = $('a.article_title').attr('href').replace(site_url,''); // /article7 for example
last_visited_url = just_visited_url;
$.address.state(site_url).value(article_url);
just_visited_url = article_url;
visited_pages_array.push(just_visited_url);
存在文章时:
last_visited_url = just_visited_url;
$.address.state(site_url).value(page_number); // This page number is the last page_number value
just_visited_url = page_number;
visited_pages_array.push(just_visited_url);
当用户按下某些浏览器按钮时,会执行此代码:
$.address.externalChange(function() {
var newPage = $.address.baseURL().replace(site_url,'');
if (visited_pages_array[visited_pages_array.length-2] == newPage) {
visited_pages_array.splice(visited_pages_array.length-1 , 1);
console.log('BACK pressed');
} else if (visited_pages_array.length > 1) {
visited_pages_array.push(newPage);
console.log('FORWARD pressed');
} else {
console.log('REFRESH pressed');
}
});