【发布时间】:2010-02-14 20:17:37
【问题描述】:
为什么有些网站(如 facebook)在 iframe 中加载脚本?
这是否允许网站一次加载超过 2 个资源,因为 iframe 的资源位于不同的 URL?
【问题讨论】:
-
为了记录,Gmail 做同样的事情。
标签: javascript html iframe
为什么有些网站(如 facebook)在 iframe 中加载脚本?
这是否允许网站一次加载超过 2 个资源,因为 iframe 的资源位于不同的 URL?
【问题讨论】:
标签: javascript html iframe
您所看到的可能是“彗星”通信的应用程序,使用隐藏的 iframe 作为数据通道。根据Wikipedia对该技术的简要说明:
动态 Web 应用程序的一项基本技术是使用隐藏的 IFrame HTML 元素(内联框架,它允许网站将一个 HTML 文档嵌入到另一个 HTML 文档中)。这个不可见的 IFrame 作为分块块发送,隐含地声明它为无限长(有时称为“永久帧”)。随着事件的发生,iframe 逐渐被脚本标签填充,其中包含要在浏览器中执行的 JavaScript。由于浏览器以增量方式呈现 HTML 页面,因此每个 script 标签都会在收到时执行。
这可用于诸如聊天之类的事情,在这种情况下,消息预计不会出现明显的延迟,并且最好不会对新数据进行定期“轮询”。如果这是您遇到的情况,您应该会在框架中看到几个 <script> 元素,并且随着时间的推移应该添加更多。
【讨论】:
编辑
所以要真正解决您的问题...我不知道!不过,以下信息可能会有所帮助:
Facebook 会在所有 JS 变量和函数前面加上您的应用程序 ID。
var ID;
变成
var 1262682068026-ID;
这将您的 javascript 的范围限制为仅限于您的应用程序,因此您不能使用 DOM 获取他们的朋友、电话号码、电子邮件、地址等,除非获得授权。它为您制作了一个小沙盒供您玩。
有关范围界定的更多信息: Facebook Docs
【讨论】:
在 iframe 中加载的 javascript 无法访问父页面对象(跨域限制)
【讨论】:
他们在 iFrame 中加载彗星(又名彗星、HTTP 推送、长寿命等)连接,因为 Internet Explorer 最终会丢弃它:
http://cometdaily.com/2007/10/25/http-streaming-and-internet-explorer/
因为它实际上是一个连续的长轮询,所以这是一个阻止程序,这个 hack 还增加了 IE 的 2 个连接限制,从而导致更好的响应,背景信息:
【讨论】: