我知道在现代浏览器中,我可以静默更改URL(无需重新加载页面),如下所示:
window.history.pushState(“object or string”, “Title”, “/new-url”);
但我希望能够检测到URL中的更改。当用户在地址栏中输入新URL时,如何处理事件并阻止页面重新加载?
P.S。我知道我可以使用onhashchange,但我只是不想使用哈希:)
答案 0 :(得分:1)
如Event when window.location.href changes所述,没有民意调查就不可能。这是2010年。也许同时有一个HTML5浏览器的解决方案。
可能您已经知道不使用hashchange
在服务器端,抓取,404检测等方面存在缺陷......
但是使用哈希也有缺点,特别是当涉及到邮件发送的深层链接时(重定向不传输哈希,通常由webmail客户端用来拥有干净的引用)。
我建议将经过测试的库用于url-routing和history API。我确定您可以在microjs.com,JSter或JSDB.IO找到一个。有很多可以在MSIE等禁用的浏览器上进行优雅的回退。
我最好的赌注是history.js和Crossroads.js(与Hasher一起)。
如果您已经使用了Backbone.js,AngularJS,Ember之类的MVC框架,那么您将获得免费的内容。
毕竟我不确定这些库中的任何一个是否能够在location.href
更改时抑制(单页)页面的重新加载。由于你失去了大部分州,我会使用#hashes。恕我直言,单页应用程序的用户不应更改浏览器位置,而应使用应用程序的导航选项。