octothorpe / number-sign / hashmark在URL中具有特殊的意义,它通常标识文档部分的名称。确切的术语是,哈希后面的文本是URL 的锚部分。如果您使用Wikipedia,则将看到大多数页面都有目录,您可以使用锚点跳到文档中的各个部分,例如:
https://en.wikipedia.org/wiki/Alan_Turing#Early_computers_and_the_Turing_test
https://en.wikipedia.org/wiki/Alan_Turing
标识页面并且Early_computers_and_the_Turing_test
是锚点。Facebook和其他Javascript驱动的应用程序(例如我自己的Wood&Stones)使用锚点的原因是,他们希望使页面具有书签功能(如对该答案的评论所建议)或支持后退按钮,而无需从服务器。
为了支持书签和后退按钮,您需要更改URL。但是,如果将页面部分(如window.location = 'http://raganwald.com';
)更改为其他URL或未指定锚点,则浏览器将从URL加载整个页面。在Firebug或Safari的Javascript控制台中尝试此操作。加载http://minimal-github.gilesb.com/raganwald
。现在,在Javascript控制台中,键入:
window.location = 'http://minimal-github.gilesb.com/raganwald';
您将看到页面从服务器刷新。现在输入:
window.location = 'http://minimal-github.gilesb.com/raganwald#try_this';
啊哈!没有页面刷新!类型:
window.location = 'http://minimal-github.gilesb.com/raganwald#and_this';
仍然没有刷新。使用后退按钮查看这些URL在浏览器历史记录中。浏览器注意到我们在同一页面上,只是在更改锚点,因此不会重新加载。由于这种行为,我们可以拥有一个Javascript应用程序,该应用程序在浏览器中似乎位于一个“页面”上,但是具有许多可标记书签的部分,这些部分遵循后退按钮。当用户输入不同的“状态”时,应用程序必须更改锚点;同样,如果用户使用后退按钮或书签或链接来加载包含锚点的应用程序,则应用程序必须恢复适当的状态。
这样就可以了:锚为Javascript程序员提供了一种使可添加书签,可索引和后退按钮友好的应用程序的机制。该技术有一个名称:它是一个单页界面。
ps该技术的第四个好处是:通过AJAX加载页面内容,然后将其注入到当前DOM中,比加载新页面要快得多。除了提高速度外,还可以在程序员的控制下执行其他技巧,例如在后台加载某些部分。
pps鉴于所有这些,“ bang”或感叹号是对Google网络搜寻器的进一步暗示,即可以从服务器以完全不同的URL加载完全相同的页面。参见Ajax爬行。另一种技术是使每个链接指向服务器可访问的URL,然后使用不引人注目的Javascript将其更改为带有锚点的SPI。
再次是关键链接:单页界面宣言
shebang