在URL中,八角符号/井号/散列符号具有特殊意义,通常用于标识文档的某个部分的名称。确切地说,跟随井号的文本是URL的锚点部分。如果您使用维基百科,您会发现大多数页面都有目录,您可以使用锚点跳转到文档中的各个部分,例如:
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程序员提供了一种机制,使书签、索引和后退按钮友好的应用程序成为可能。这个技术有一个名字:它是一个Single Page Interface。
p.s. 这种技术还有第四个好处:通过AJAX加载页面内容,然后将其注入到当前DOM中,可以比加载新页面快得多。除了速度增加外,还可以在程序员的控制下执行进一步的技巧,例如在后台加载某些部分。
p.p.s. 鉴于所有这些,“bang”或感叹号是向Google的网络爬虫发出的进一步提示,即可以从服务器以稍微不同的URL加载完全相同的页面。请参见Ajax Crawling。另一种技术是使每个链接指向一个服务器可访问的URL,然后使用非侵入式的Javascript将其更改为带有锚点的SPI。
这是关键链接:单页面应用宣言
shebang
是什么...http://en.wikipedia.org/wiki/Shebang_%28Unix%29 - JYelton