1

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

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

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

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

任何帮助将不胜感激。

4

1 回答 1

1

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

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

于 2011-12-27T13:55:54.740 回答