【发布时间】:2013-05-24 08:47:59
【问题描述】:
编辑 3: 这个jsFiddle 与插件一起使用,我几乎拥有它。
编辑 2:我创建了一个 fiddle。我无法让插件在那里工作,但也许更容易分析。
在我正在构建的网页中,文章(帖子)和新页面是通过 Ajax 加载的。在加载新的 Ajax 内容的同时,地址栏会发生变化(使用jQuery Address plugin)。
所以正常的导航应该是这样的:
/ /page2 /page3 /article7 /page3 /page4
请注意,在此导航中,没有按下浏览器按钮,当退出 article7 时,网站会返回到之前的网址,在这种情况下为 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
/ /page2 /page3
用户在 /page2 并按下 Forward -> new_page=/page3 不等于 penultimate_page_in_array(/) => FORWARD
/ /page2
用户在 /page3 并按下 Forward -> new_page=/article7 不等于 penultimate_page_in_array(/page2) => FORWARD
/ /page2 /page3
用户在 /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');
}
});
【问题讨论】:
-
能否提供代码?
-
我添加了代码,谢谢
-
我不确定我是否同意这个问题的编辑。我正在使用 jQuery Adress 插件,但我要求的不是完全关于插件的语句背后的逻辑。
-
你真正想做什么?
-
"插件未检测到用户何时按下后退或前进按钮。" => 使用后退按钮访问
page3url,使用前进按钮访问page3url,以及通过在浏览器的地址栏中输入page3url 有区别吗?跨度>
标签: jquery ajax browser-history jquery-address