我正在创建一个在浏览器中运行的HTML和Javascript客户端,它与REST API对话。我使用RouteMap来设置我的url。所以我保留了这样的约定
http://mysite.com/#/{ResourceName}/[edit|view|list]/[Id]/
我只设置了一个路由,我在绑定hashchange的函数中抓取这些参数。大多数东西都很好用。只有两个问题,我被它们卡住了。
- 如果用户点击同一链接两次,hashchange事件不会触发。是的,hash没有改变,所以很明显它不会触发。但是应该有一些事情可以做,而我却错过了。
- 如果我在UI中改变了一些东西(比如提出新的div和隐藏一些),我不想改变哈希链接,我失去了历史,不能通过点击后退按钮正确返回。
对于#1,您可能希望将处理程序附加到链接单击事件。这样你就可以知道链接是否被点击了。当我使用onhashchange时,我总是在点击事件上附加一些东西来帮助onhashchange的填充,所以至少我可以告诉它什么时候失败。
对于#2,我想指出,让自动的东西改变用户的历史记录是有问题的。你可以用微小的无意义的散列更改来填充某人的历史。我建议只在用户实际交互时更改历史记录。除此之外,HTML5确实提供了pushState
和popState
。参考