问题 为什么有些网站(如facebook)会在iframe中加载脚本?


为什么有些网站(如facebook)会在iframe中加载脚本?

这是否允许网站一次加载2个以上的资源,因为iframe的资源位于不同的URL?


10884
2018-02-14 20:17


起源

对于记录,Gmail也做同样的事情。 - Sasha Chedygov


答案:


你所看到的,可能是“Comet”通信的应用,使用隐藏的iframe作为数据通道。根据技术的简短解释 维基百科

动态Web应用程序的基本技术是使用隐藏的IFrame HTML元素(内联框架,允许网站将一个HTML文档嵌入另一个HTML文档)。这个不可见的IFrame作为一个chunked块发送,它隐式地声明它是无限长的(有时称为“永远帧”)。当事件发生时,iframe逐渐填充脚本标记,其中包含要在浏览器中执行的JavaScript。由于浏览器以递增方式呈现HTML页面,因此每个脚本标记都会在收到时执行。

这可以用于类似聊天的事情,其中​​消息预期出现而没有明显的延迟,并且优选地没有针对新数据的定期“轮询”。如果这是你遇到的,你应该看到几个 <script> 框架中的元素,随着时间的推移应该添加更多元素。


5
2018-02-14 20:20





编辑

所以要真正解决你的问题...我不知道!但是,以下信息可能会有所帮助:

Facebook将所有JS变量和函数与您的应用程序ID相结合。

var ID;

var 1262682068026-ID;

这会将您的javascript范围限制为仅限您的应用程序,因此除非获得授权,否则您无法使用DOM获取他们的朋友,电话号码,电子邮件,地址等。它为你提供了一个小沙盘。

有关范围界定的更多信息: Facebook文档


4
2018-02-14 20:23



这是如何回答这个问题的? - SLaks
SLaks的目的是制作沙箱 - Esben Skov Pedersen
123-ID如何成为有效的变量名?认为你的意思是123_ID。你应该更新。 - mythz


在iframe中加载的javascript无法访问父页面对象(跨域限制)


1
2018-02-14 20:20



作为“跨域限制”,这仅适用于iframe来自与父页面不同的域,对吧? - Jørn Schou-Rode
请参阅我的回答:我不知道不同的域是否限制对父页面的访问,但他们明确地明确地将每个函数/变量附加到唯一的#以有效地沙箱化它们 - Alex Mcp
绝对正确:-)我想我误解了这个问题。 - Qwerty


他们在iFrame中加载彗星(又名彗星,HTTP推送,长寿命等)连接,因为Internet Explorer最终会丢弃它:

http://cometdaily.com/2007/10/25/http-streaming-and-internet-explorer/

因为它实际上是一个连续的长轮询,这是一个阻止,这个黑客也增加了IE的2连接限制,导致更好的响应,背景信息:

http://alex.dojotoolkit.org/2006/02/what-else-is-burried-down-in-the-depths-of-googles-amazing-javascript/


1
2018-02-14 20:55