【发布时间】:2014-01-10 15:18:20
【问题描述】:
我有时会在一些网站上看到,例如 facebook 或来自 google 的 Play Store,通过单击链接会更改 url(不使用 #blah),但 wohle 网站不会重新加载。我可以使用后退/前进,所以我认为它不可能是 javascript。
谁能告诉我如何在网站上实现它?谢谢
【问题讨论】:
标签: javascript html
我有时会在一些网站上看到,例如 facebook 或来自 google 的 Play Store,通过单击链接会更改 url(不使用 #blah),但 wohle 网站不会重新加载。我可以使用后退/前进,所以我认为它不可能是 javascript。
谁能告诉我如何在网站上实现它?谢谢
【问题讨论】:
标签: javascript html
对于ie8等不支持htmll5的浏览器,可以使用库https://github.com/browserstate/history.js/模拟html5 pushstate方法。
【讨论】:
它使用 pushState,它是使用 javascript 和 HTML5 与 pushState 兼容的浏览器完成的。这是一些文档:https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history
引用这些文档:
假设http://mozilla.org/foo.html 执行以下JavaScript:
var stateObj = { foo: "bar" };
history.pushState(stateObj, "page 2", "bar.html");
这将导致 URL 栏显示 http://mozilla.org/bar.html,但不会导致浏览器加载 bar.html 甚至检查 bar.html 是否存在。
这样可以改变url,使用javascript渲染新页面。我通过使用 Backbone.js 来做到这一点,但还有其他工具可以做同样的事情。它与那些带有# 的 URL 基本上是相同的技术,除了它们摆脱了哈希。 Backbone.js 默认使用#,但可以配置为使 URL 看起来正常。
【讨论】:
实现此目的的另一种方法是使用AngularJS。正如上面cmets所说,这将使用AJAX获取新数据显示,然后使用javascript更改页面内容,所有这些都不需要加载新的URL。
【讨论】: