好奇:Facebook的轮询服务在回调期间使用的语法是什么

时间:2011-09-27 04:48:39

标签: javascript ajax facebook polling news-feed

我正在Chrome浏览器的开发者工具上观看网络监视器,了解Facebook如何更新整个新闻Feed中的内容。

AJAX的所有回复都以以下内容开头:

for (;;);{"__ar":1,"payload":[]}

for(;;);作品是做什么的?

这是他们自定义JS框架的一部分吗?或者这是原生的,只是我不熟悉的东西?

当我预览时,它似乎是作为json对象加载的。

2 个答案:

答案 0 :(得分:1)

这似乎是对内容保护(DRM)的蹩脚尝试。 for()循环基本上是无限的。目的似乎是任何人用天真的javascript获取他们的AJAX请求都会因为无限循环而导致代码挂起。

for()循环也会为标准JSON解析器生成错误,例如jQuery或YUI中甚至JSON.org中的解析器。要使用请求,您需要编写自己的解析器,或者首先从请求中删除for()循环。

这就是为什么我说这看起来很蹩脚。因为用一些代码从字符串中删除for()循环并不困难。

答案 1 :(得分:1)

这本身并不是内容保护;正如已经指出的那样,解决它是微不足道的。可能的目的是“破坏”仅使用字符串并将其提供给javascript eval()函数的应用程序。这种方法曾经非常普遍,而且仍然比你想象的更频繁。我怀疑有不少程序员认为这实际上是将JSON字符串解析为javascript变量的正确方法。将for循环添加到字符串的开头会松散地强制执行parse-instead-eval规则。当然,如果程序员已经开始使用eval,那么解决它仍然是微不足道的。我想说这更像是一个破坏代码检测器,它会强制纠正旧的(和懒惰的)编码。