Javascript/jQuery检测哈希变化只有在浏览器的后退/前进按钮点击



是否有可能仅在浏览器历史记录更改(即后退或前进按钮)上检测哈希更改?

我已经看到了onBeforeUnload事件,但是这个事件不会在哈希改变时触发,因为窗口没有卸载。

hashchange事件显然会在哈希值发生变化时触发。修复吗?最好没有插件。我已经看到了jQuery的历史插件,但我正在寻找最简单的解决方案。

谢谢你的帮助

每当我的导航被触发时,我都标记了一个标志,如果标记了标志,hashChange事件将忽略它,否则它将处理它,就好像它是一个后退/前进事件。

看一下窗户。onhashchange事件。

目前并不是所有的浏览器都支持。看看这里的BA jQuery哈希更改插件。如果你最后选择使用插件,它可能会起作用。

我希望这对你有帮助!

我想Chris问的是给窗户找条路。Onhashchange事件只在你浏览浏览器历史记录(后退/前进)按钮时起作用。

答案= No…但是你可以在函数中加入if语句。
我会这样做:

$('.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来跟踪站点状态。如果你浏览网站,然后开始使用后退按钮来浏览,一旦网站在历史记录中,它就会动态地改变状态,就像用户实际上通过导航点击一样,而不是需要重新加载页面。它只在使用历史记录导航时检查哈希值。

我有一个不同的建议。假设您有一个指向某个页面的链接(但使用AJAX而不刷新)。当单击该链接时,将哈希值更改为您喜欢的任何值。现在,当用户单击后退按钮时,哈希值会变回用户单击链接之前的原始值……但你能做的是检查点击事件是否触发了链接或按钮(或任何你想检查的选择器/事件)。如果它被触发,您就知道请求来自页面本身的点击。如果没有触发要检查的事件,则知道单击来自后退或前进按钮。

您可以做的另一件事是在哈希值发生变化时(根据您检查的任何事件触发情况,从后退或前进按钮)向其添加后缀。因此,如果你有#pageTitle的哈希值,你可以将其转换为#pageTitle_chrome,以表明哈希值已从后退按钮或前进按钮更改。

然后,当你检查你的哈希时,你可以看看它是否包含_chrome来检测它是什么样的哈希变化

你不能用散列,甚至HTML5 History API做到这一点。没有事件专门与用户单击后退或前进按钮相关联。您可能需要一种不同的方法来解决原始问题,除非在客户机上安装某种扩展之类的东西是可行的。

相关内容

  • 没有找到相关文章

最新更新