Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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/5/url/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
什么';Facebook上的shebang/hashbang(#!)和Twitter的新URL是什么?_Facebook_Url_Twitter_Fragment Identifier_Hashbang - Fatal编程技术网

什么';Facebook上的shebang/hashbang(#!)和Twitter的新URL是什么?

什么';Facebook上的shebang/hashbang(#!)和Twitter的新URL是什么?,facebook,url,twitter,fragment-identifier,hashbang,Facebook,Url,Twitter,Fragment Identifier,Hashbang,我刚刚注意到,我们现在使用的长而复杂的Facebook URL如下所示: http://www.facebook.com/example.profile#!/第页/另一页/123456789012345 据我回忆,今年早些时候,它只是一个普通的URL片段,比如字符串(以#开头),没有感叹号。但现在是shebang或hashbang(!),我以前只在shell脚本和Perl脚本中看到过 URL现在还具有#符号。例如,Twitter个人资料URL现在如下所示: http://twitter.com/

我刚刚注意到,我们现在使用的长而复杂的Facebook URL如下所示:

http://www.facebook.com/example.profile#!/第页/另一页/123456789012345

据我回忆,今年早些时候,它只是一个普通的URL片段,比如字符串(以
#
开头),没有感叹号。但现在是shebang或hashbang(
),我以前只在shell脚本和Perl脚本中看到过

URL现在还具有
#符号。例如,Twitter个人资料URL现在如下所示:

http://twitter.com/#!/螺栓时钟

#现在在URL中扮演一些特殊的角色,比如某个Ajax框架或其他东西,因为新的Facebook和Twitter界面现在大部分是Ajaxified?
在我的URL中使用这项技术会对我的Web应用程序有任何好处吗?

这项技术非常有用。

这个用来告诉谷歌如何索引页面


这项技术已经被使用与HTML5一起引入的JavaScript历史API的能力所取代。对于像
www.example.com/ajax.html这样的URL!key=value
,谷歌将检查URL
www.example.com/ajax.html?\u转义\u片段\u=key=value
,以获取非ajax版本的内容。

八进制/数字符号/hashmark在URL中具有特殊意义,它通常标识文档某个部分的名称。确切地说,散列后面的文本是URL的锚定部分。如果您使用Wikipedia,您将看到大多数页面都有一个目录,您可以使用一个锚点跳转到文档中的部分,例如:

https://en.wikipedia.org/wiki/Alan_Turing
识别页面和早期计算机,图灵测试是锚定。Facebook和其他Javascript驱动的应用程序(比如我自己的应用程序)使用锚的原因是,它们希望使页面成为可书签页面(正如对该答案的评论所建议的那样),或者支持后退按钮,而无需从服务器重新加载整个页面

为了支持书签和后退按钮,您需要更改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程序员提供了一种机制,用于创建可书签、可索引和后退按钮友好的应用程序。这项技术有一个名字:它是一种技术

p、 这项技术还有第四个好处:通过AJAX加载页面内容,然后将其注入当前DOM,比加载新页面快得多。除了速度提高之外,在程序员的控制下,还可以执行诸如在后台加载某些部分之类的其他技巧

p、 另外,考虑到所有这些,“砰”或感叹号对谷歌的网络爬虫来说是一个进一步的提示,即完全相同的页面可以从服务器上以稍微不同的URL加载。看见另一种技术是使每个链接指向服务器可访问的URL,然后使用不引人注目的Javascript将其更改为带有锚的SPI


这里又是关键链接:

我总是假设
只是指出后面的散列片段对应一个URL,带有
取代站点根目录或域。理论上,它可以是任何东西,但谷歌AJAX爬行API似乎喜欢这种方式


当然,散列只是表明没有发生真正的页面重新加载,所以是的,它是用于AJAX目的的。编辑:Raganwald做了一个很好的工作,更详细地解释了这一点。

首先:我是Raganwald引用的单页界面宣言的作者

正如raganwald很好地解释的那样,FaceBook和Twitter中使用的单页界面(SPI)方法的最重要方面是在URL中使用哈希

字符
仅为Google的目的而添加,此符号是Google对AJAX密集型网站(在极端的单页界面网站中)进行抓取的“标准”。当Google的爬虫程序发现一个带有
#的URL时它知道存在一个替代的传统URL,提供相同的页面“状态”,但在这种情况下是在加载时间

尽管有
#组合对于搜索引擎优化非常有趣,只有谷歌(据我所知)支持,通过一些JavaScript技巧,您可以为任何网络爬虫(Yahoo、Bing…)构建与SPI网站搜索引擎优化兼容的网站

SPI宣言和演示没有使用Google的
格式