是否可以仅在浏览器历史记录更改(即“后退”或“前进”按钮)时检测哈希更改?
我已经看到了onBeforeUnload事件,但是该事件不会在哈希更改时触发,因为窗口没有卸载。
显然,hashchange事件会在任何时候触发哈希更改。 有什么解决方法吗? 最好不要使用插件。 我已经看到了jQuery历史插件,但正在寻找最简单的解决方案。
感谢您的帮助。
是否可以仅在浏览器历史记录更改(即“后退”或“前进”按钮)时检测哈希更改?
我已经看到了onBeforeUnload事件,但是该事件不会在哈希更改时触发,因为窗口没有卸载。
显然,hashchange事件会在任何时候触发哈希更改。 有什么解决方法吗? 最好不要使用插件。 我已经看到了jQuery历史插件,但正在寻找最简单的解决方案。
感谢您的帮助。
每当我的导航被触发时,我会标记一个标志,如果标志已经被标记,则 hashChange 事件会忽略它,否则它将处理它,就像是后退/前进事件一样。
$('.nav').click(function() { //on the onclick event for your nav add a class
$(this).addClass('navClick'); // before you change the hash.
window.location.hash = 'state' + $(this).html();
});
function getLocationHash() {
return window.location.hash.substring(1);
}
window.onhashchange = function(e) { // if element does not exist with your
if ($('.navClick').length == 0) { // 'navClick' class then check hash
switch(getLocationHash()) {
case 'state1':
execute code block 1;
break;
case 'state2':
execute code block 2;
break;
default:
code to be executed if different from case 1 and 2;
}
} else { // removes the class if it does
$('.navClick').removeClass('navClick');
}
};
window.location.hash
来跟踪网站状态。如果您通过站点导航,然后开始使用“后退”和“前进”按钮进行导航,一旦站点被添加到历史记录中,它将动态地更改状态,就像用户实际上是通过导航单击进行导航一样,而不需要之后重新加载页面。只有在使用历史记录进行导航时才会检查哈希值。#pageTitle
,你会将其变成 #pageTitle_chrome
,以表示哈希是从后退按钮或前进按钮更改的。_chrome
,以检测它是什么类型的哈希更改。使用哈希或HTML5 History API都无法实现这个功能。因为没有事件与用户点击“后退”或“前进”按钮独立关联。除非在客户端安装某种扩展程序之类的解决方案可行,否则您可能需要采用不同的方法来解决原始问题。