Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 做像Twitter、Hash Bang#这样的链接!URL';s_Javascript_Html_Seo_Hashbang - Fatal编程技术网

Javascript 做像Twitter、Hash Bang#这样的链接!URL';s

Javascript 做像Twitter、Hash Bang#这样的链接!URL';s,javascript,html,seo,hashbang,Javascript,Html,Seo,Hashbang,可能重复: 我想知道Twitter的链接是如何工作的 如果您查看源代码,您使用的链接就像/#/我/连接或/#/i/discover,但它们没有像load('connect')之类的JavaScript函数,也不需要重新加载页面。它只是改变了页面内容 我看到了页面,但所有这些文件都必须存在,而你不能直接找到其中一个。我想象在Twitter上,这些文件都不存在,而是用其他方法处理的。如果我错了,请纠正我 有没有办法复制这种效果?如果是这样的话,是否有关于如何进行此操作的教程?您可能想了解更多 它通

可能重复:

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

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

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


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

您可能想了解更多

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

使用散列加上可以使用散列确定页面的事实,可以说可以将AJAX请求的页面保留在“历史记录”中。除此之外,散列URL只是URL,包括散列,它们都可以作为书签,因此您还可以为AJAX请求的页面添加书签。

“hash Bang”导航,有时也被称为

http://example.com/path/to/#!/一些ajax状态
…是一个临时问题的临时解决方案,由于采用了现代浏览器标准,该问题很快就不再成为问题。推特很可能会像Facebook已经在做的那样逐步淘汰它

它是几个概念的组合…

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

http://example.com/script.php#fourth-段落
哈希后URL中的任何内容都不是从服务器请求的,而是由浏览器在页面中搜索的。这一切仍然运作良好

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

一些聪明人解决了第一个问题,他们将散列作为一种“状态”引用,包含在链接和书签中。加载文档后,浏览器读取散列并运行AJAX请求,显示页面及其动态AJAX更改

http://example.com/script.php#some-阿贾克斯州
这解决了AJAX问题,但搜索引擎问题仍然存在。搜索引擎不像浏览器那样加载页面和执行Javascript

谷歌(Google)出手相救。谷歌提出了一个方案,在这个方案中,任何带有hash bang(#!)而不是hash(#)的URL都会向搜索机器人建议有一个用于索引的替代URL,其中包括一个“_escape_fragment”变量。请在此处阅读:

如今,随着大多数主流浏览器采用Javascript的pushstate,所有这些都变得过时了。使用pushstate,当动态加载或更改内容时,可以更改当前页面URL而不会导致页面加载。如果需要,这将为书签和历史提供一个真正的工作URL。然后可以像往常一样创建链接,而无需散列和散列


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

Twitter如何使用/#!/URL路径?这只会增加#。还有,有没有一个活生生的例子?如果你想要一个活生生的例子,就用Twitter吧
window.location.hash
返回“#”(包括哈希)之后的任何内容,如
#/i/connect
#/i/discover
。然后,您可以使用该字符串确定希望通过AJAX加载的位置。这取决于站点如何使用散列来确定它们的去向。没有标准的做法来解析散列后的数据。在twitter的例子中,它在第一个
/
之后开始解析。仅键入
/#/
/#
只是加载主页。我正在查看与window.location.has相关的代码,不知道这些代码的含义
(function(){var a=document.getElementsByTagName(“html”)[0],b=window.location.hash.split(“?”[0],c=b.match(/)//)&&b.replace(/?[!]?[\/]?/,”“)!=”;c?a.className+=“删除预渲染内容”:(a.className+=“使用预渲染内容”、a.getAttribute(“数据导航突出显示类名”)&(a.className+=”a.getAttribute(“数据导航突出显示类名”))})();它所做的是删除参数(在
之后的参数),然后删除
/#
/#
。然后确定是添加
预呈现内容的类名
,还是将
预呈现内容
删除到
html
,并获取几个类名。就是这样。当你把一个问题标记为重复问题时,引用重复问题本身会很有用。这就是你说的那个吗?你现在应该认真地重新考虑你被接受的答案,因为@BillBad解释得非常好@艾敏:好的,我做到了!我一段时间都没有回过头来看这个问题,这是一个很好的答案!在过去的一个小时里,我一直在浏览互联网,以了解整个概念,你解释得很好。它并没有过时。值得注意的是,如果你有一个(文字)单页应用程序,更改url将不起作用。您必须将web服务器设置为在后台将所有请求通配符到单个页面。@Caleb这非常非常重要,