我正在Chrome浏览器的开发者工具上观看网络监视器,了解Facebook如何更新整个新闻Feed中的内容。
AJAX的所有回复都以以下内容开头:
for (;;);{"__ar":1,"payload":[]}
for(;;);
作品是做什么的?
这是他们自定义JS框架的一部分吗?或者这是原生的,只是我不熟悉的东西?
当我预览时,它似乎是作为json对象加载的。
答案 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,那么解决它仍然是微不足道的。我想说这更像是一个破坏代码检测器,它会强制纠正旧的(和懒惰的)编码。