关于javascript:做Twitter,Hash-Bang#等链接!

Doing links like Twitter, Hash-Bang #! URL's

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What’s the shebang/hashbang (#!) in Facebook and new Twitter URLs for?

我想知道Twitter的链接是如何工作的。

如果你查看源代码,你使用的链接是像/!/I/Connect或/!/我/发现,但它们没有像加载("连接")之类的附加JavaScript函数,而且不需要重新加载页面。它只是改变了页面内容。

我看到了这个页面,但是所有这些文件都必须存在,你不能直接进入其中一个。我想象在twitter上,这些文件中的每一个都不存在,它是用其他方法处理的。不过,如果我错了,请纠正我。

我有办法复制这种效果吗?如果是这样,是否有关于如何进行此操作的教程?


"hash bang"导航,有时被称为…

1
http://whatever.com/path/to/#!/some-ajax-state

…是解决临时问题的临时解决方案,由于现代浏览器标准的存在,这一问题很快就变成了非问题。Twitter很可能会逐步退出,就像Facebook已经在做的那样。

这是几个概念的结合…

在过去,链接有两个用途:它加载了一个新文档和/或向下滚动到一个嵌入的锚,如哈希()所示。

1
http://whatever.com/script.php#fourth-paragraph

在哈希之后的URL中的任何内容都不是从服务器请求的,而是由浏览器在页面中搜索的。这一切都还可以。

通过采用Ajax,可以将新内容加载到当前(已加载)页面中。在这种动态加载下,出现了几个问题:1)没有用于书签或链接到新内容的唯一URL,2)搜索将永远看不到它。

一些聪明人通过将哈希用作链接和书签中包含的"状态"引用来解决第一个问题。加载文档后,浏览器读取散列并运行Ajax请求,显示页面及其动态Ajax更改。

1
http://whatever.com/script.php#some-ajax-state

这解决了Ajax问题,但搜索引擎问题仍然存在。搜索引擎不像浏览器那样加载页面和执行javascript。

谷歌来拯救。Google提出了一个方案,其中任何一个带有哈希键的URL(!)除了散列()之外,它还建议搜索机器人有一个备用的索引URL,其中包括一个"_-escaped_fragment_u"变量。在这里阅读…

https://developers.google.com/webmasters/ajax-crawling/docs/getting-started网站

今天,随着大多数主要浏览器都采用了javascript的pushstate,所有这些都变得过时了。使用pushstate,由于内容是动态加载或更改的,因此可以在不引起页面加载的情况下更改当前页面URL。如果需要,这将为书签和历史记录提供一个真正的工作URL。然后可以像往常一样建立链接,而不需要散列和散列。

到今天为止,如果你在一个旧的浏览器中加载Facebook,你会看到散列消息,但是当前的浏览器将演示pushstate的使用。


你可能想看看更多的独特URL。

它通过Ajax加载页面,并解析"哈希"(在后面的值后面加上"值")来确定要加载哪个页面。此外,由于Ajax请求不计入浏览器的历史,因此"后退按钮"的属性被使用。但是浏览器确实将历史记录存储在哈希更改中。

使用散列加上可以使用散列确定页面的事实,可以说可以将Ajax请求的页面保留在"历史"中。此外,散列的URL只是URL,它们可以书签,包括散列,因此您也可以将Ajax请求的页面标记为书签。