【问题标题】:Hashchange not firing when user clicks on same link当用户单击同一链接时,Hashchange 不会触发
【发布时间】:2011-12-27 07:41:50
【问题描述】:

我正在创建一个 HTML 和 Javascript 客户端,用于在与 REST API 对话的浏览器中运行。我正在使用RouteMap 设置我的网址。所以我保留了一个类似这样的约定

http://mysite.com/#/{ResourceName}/[edit|view|list]/[Id]/

我只设置了一个路由,我在绑定到 hashchange 的函数中获取这些参数。大多数事情都很好。只有两个问题,我因此而陷入困境。

  1. 如果用户点击同一个链接两次,hashchange 事件不会触发。是的,哈希没有改变,所以很明显它不会触发。但是应该有一些可以做的事情,我错过了。
  2. 如果我在 UI 中更改了一些我不想更改哈希链接的内容(例如显示新的 div 并隐藏一些),我会丢失该历史记录并且无法通过正确单击后退按钮返回。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript browser-history hashchange


    【解决方案1】:

    对于#1,您可能希望将处理程序附加到链接单击事件。这样你就可以判断链接是否被点击。当我使用 onhashchange 时,我总是在 click 事件上附加一些东西来帮助 polyfills 进行 onhashchange,所以至少我可以知道它什么时候失败了。

    对于#2,我想指出让自动内容更改用户历史记录是有问题的。您可以用微小的、无意义的哈希更改填充某人的历史记录。我建议仅在用户实际交互时更改历史记录。除此之外,HTML5 确实提供了pushStatepopStateReference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多