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 应用程序,它在浏览器看来是在一个“页面”上,但有许多尊重后退按钮的可书签部分。当用户进入不同的“状态”时,应用程序必须更改锚点,同样如果用户使用后退按钮或书签或链接来加载包含锚点的应用程序,应用程序必须恢复适当的状态。
所以你有了它:Anchors 为 Javascript 程序员提供了一种机制,用于制作可书签、可索引和后退按钮友好的应用程序。这种技术有一个名字:它是一个单页界面。
ps 这种技术还有第四个好处:通过 AJAX 加载页面内容,然后将其注入当前 DOM 可以比加载新页面快得多。除了提高速度之外,还可以在程序员的控制下执行进一步的技巧,例如在后台加载某些部分。
pps 考虑到所有这些,“砰”或感叹号进一步暗示了 Google 的网络爬虫,可以从服务器以稍微不同的 URL 加载完全相同的页面。请参阅Ajax 爬网。另一种技术是让每个链接指向一个服务器可访问的 URL,然后使用不显眼的 Javascript 将其更改为带有锚点的 SPI。
这是关键链接:单页界面宣言