做类似Twitter、Hash Bang#的链接!URL's

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

本文关键字:URL 链接 Twitter Bang# Hash      更新时间:2023-09-26

可能重复:
脸书和新推特URL中的shebang/hashbang(#!)是用来做什么的?

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

如果你在源代码中查看,你使用的链接是像/#/i/connect或/#/i/discover,但它们没有像load('connect')之类的JavaScript函数,也不需要重新加载页面。它只是更改页面内容。

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

有没有办法复制这种效果?如果是的话,有没有关于如何做到这一点的教程?

"Hash-Bang"导航,有时被称为。。。

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

是一个临时问题的临时解决方案,由于现代浏览器标准,这个问题很快就成为了一个非问题。推特很可能会逐步淘汰它,就像脸书已经在做的那样。

它是几个概念的结合

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

http://example.com/script.php#fourth-paragraph

散列之后URL中的任何内容都不是从服务器请求的,而是由浏览器在页面中搜索的。这一切仍然很好。

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

一些聪明的人通过使用散列作为一种"状态"引用来解决第一个问题,该引用将被包括在链接&书签。文档加载后,浏览器读取散列并运行AJAX请求,显示页面及其动态AJAX更改。

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

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

谷歌出手相救。谷歌提出了一个方案,任何带有hash bang(#!)而不是hash(#)的URL都会向搜索机器人建议有一个替代URL用于索引,其中包括一个"_escaped_fragment_"变量等。在这里阅读:Ajax爬网:入门。

如今,随着Javascript的pushstate在大多数主流浏览器中被采用,所有这些都变得过时了。使用pushstate,当内容被动态加载或更改时,可以在不导致页面加载的情况下更改当前页面URL。当需要时,这为书签提供了一个真正的工作URL;历史然后,链接可以像往常一样制作,没有散列&散列刘海

从今天起,如果你在旧的浏览器中加载Facebook,你会看到散列刘海,但当前的浏览器将演示pushstate的使用。

您可能想了解更多关于Unique URL的信息。

它通过AJAX加载页面,并解析"hash"("#"之后的值)以确定要加载的页面。此外,使用这种方法是因为AJAX请求不计入浏览器的历史记录,因此"后退按钮会中断"。但是浏览器确实将散列变化存储到历史中。

使用散列加上可以使用散列来确定页面的事实,可以说您可以将AJAX请求的页面"保存在历史中"。除此之外,散列URL只是URL,并且它们可以作为书签,包括散列,所以您也可以为AJAX请求的页面添加书签。