Javascript Hashchange在用户单击同一链接时不触发

Javascript Hashchange在用户单击同一链接时不触发,javascript,browser-history,hashchange,Javascript,Browser History,Hashchange,我正在创建一个HTML和Javascript客户端,用于在与RESTAPI对话的浏览器中运行。我正在使用设置我的URL。所以我有一个这样的惯例 http://mysite.com/#/{ResourceName}/[edit|view|list]/[Id]/ 我只设置了一条路由,并在hashchange函数中获取这些参数。大多数东西都很好用。只有两个问题,我因为它们而陷入困境 如果用户两次单击同一链接,hashchange事件不会触发。是的,hash没有改变,所以很明显它不会启动。但是应该有一

我正在创建一个HTML和Javascript客户端,用于在与RESTAPI对话的浏览器中运行。我正在使用设置我的URL。所以我有一个这样的惯例

http://mysite.com/#/{ResourceName}/[edit|view|list]/[Id]/
我只设置了一条路由,并在hashchange函数中获取这些参数。大多数东西都很好用。只有两个问题,我因为它们而陷入困境

  • 如果用户两次单击同一链接,hashchange事件不会触发。是的,hash没有改变,所以很明显它不会启动。但是应该有一些事情可以做,我错过了
  • 如果我在UI中更改了一些我不想更改哈希链接的内容(比如调出新的div并隐藏一些内容),那么我就失去了历史记录,无法通过正确单击“上一步”按钮返回 任何帮助都将不胜感激。

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

    对于#2,我想指出,让自动填充更改用户的历史记录是有问题的。你可以用微小的、毫无意义的散列更改来填充某人的历史记录。我建议只在用户实际交互时更改历史记录。除此之外,HTML5确实提供了
    pushState
    popState

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

    对于#2,我想指出,让自动填充更改用户的历史记录是有问题的。你可以用微小的、毫无意义的散列更改来填充某人的历史记录。我建议只在用户实际交互时更改历史记录。除此之外,HTML5确实提供了
    pushState
    popState