通过Javascript更新地址栏

时间:2010-12-24 19:18:16

标签: javascript ajax browser dojo github

现在我知道在不更改页面的情况下更改位置栏的内容是不可能的(并且我不是在谈论#)。我最近注意到了github.com。他们如何在他们的网站上这样做?当用户点击浏览器的后面或下一个按钮时,他们可以轻松获得一个事件。 dojo.back也有这个功能。但是如何在不离开页面的情况下使用javascript更改地址栏?

3 个答案:

答案 0 :(得分:3)

有两种方法:

  • HTML5的pushState()功能。例如,Facebook和Github使用它。它允许您在历史状态更改时修改完整的URL并触发事件处理程序。 Mozilla有good overview
  • 旧的变体是使用URL的哈希部分(这就是Twitter所做的)。这意味着您更改window.location.hash,监视更改,并根据该哈希值加载相应的内容。但是,这意味着当用户请求时,例如http://twitter.com/#!/27c3/status/18331752900591616,只有通过Web服务器请求哈希符号之前的部分,哈希之后的所有内容客户端的业务。这意味着服务器还无法决定将哪些内容传递给客户端。

答案 1 :(得分:2)

尝试dojo.hash

答案 2 :(得分:1)

你在GitHub上所指的是#(hash)。当您右键单击行号时,它会将数字添加到您的哈希值。

window.location.hash = 'HELLO';

将其放入页面中进行试用。如果没有页面重新加载,则无法更改window.location。后退按钮的东西有点棘手,但Dojo是你最好的选择。 jQuery没有提供这个。 Dojo的代码非常简洁,因此您应该能够对其功能进行反向工程(如果您选择将该功能包含在您自己的库中)。

您还会注意到Google正在执行相同的操作:http://code.google.com/p/digitalxero/source/browse/#svn%2Ftrunk%2Flocale%2Fde

如果单击文件夹(左侧),则会更改哈希值,并提供不同的内容。